A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘 佳 中级黑马   /  2012-9-28 09:51  /  1664 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘 佳 于 2012-9-28 10:21 编辑

代码在视频基础上自己加了红色部分,因为while为true是无限循环,想让他在不符合条件时停止循环。
加了之后运行起来却只有一个线程在跑,我想不出来哪错了。。求解。

class Ticket implements Runnable//extends Thread
{
        private  int tick = 200;
        private boolean flag=true;
        Object obj=new Object();
        public void run()
        {
               
                while(flag)
                {
                        synchronized(obj)
                        {
                                if(tick>0)
                                {
                                        flag=true;
                                        try{Thread.sleep(3);}catch(Exception e){}
                                        System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
                                }
                                else
                                        flag=false;
                                
                        }
                        
                        
                        
                }
        }
}


class  TicketDemo
{
        public static void main(String[] args)
        {

                Ticket t = new Ticket();

                Thread t1 = new Thread(t);//创建了一个线程;
                Thread t2 = new Thread(t);//创建了一个线程;
                Thread t3 = new Thread(t);//创建了一个线程;
                Thread t4 = new Thread(t);//创建了一个线程;
                t1.start();
                t2.start();
                t3.start();
                t4.start();


               
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
测试了一下,无错

1.jpg (28.11 KB, 下载次数: 19)

1.jpg
回复 使用道具 举报
李建强 发表于 2012-9-28 10:05
测试了一下,无错

我试了七八次啊,都是一个线程在跑,tick改成1000还是那样。。
回复 使用道具 举报
看不到哪里错误,你把sleep()方法的时间再调大点,300这样就应该会有效果了!
回复 使用道具 举报
本帖最后由 王玉岩 于 2012-9-28 10:21 编辑

   if(tick>0)
            {
                  flag=true;
                   try{Thread.sleep(3);}catch(Exception e){}
                   System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
          }
                   else
                  flag=false;
                  System.out.println(Thread.currentThread().getName()+flag);   //刚才测试了下在这里加了一条输出语句
                 表示没木有问题:你可以把票数弄大一点

QQ截图20120928101656.png (1.9 KB, 下载次数: 18)

QQ截图20120928101656.png

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李建强 发表于 2012-9-28 10:05
测试了一下,无错

有测试了四五次,只有一次瞬间出现了个别的名称。。。我这电脑我都服了。。。
回复 使用道具 举报
你把睡眠时间调大点就有效果了,我把时间调大了果断没问题了
回复 使用道具 举报
陈琦 中级黑马 2012-9-28 12:27:55
8#
你把 tick = 200;调大点,或把睡眠时间条成300或3000都可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马