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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ilvsoft 中级黑马   /  2014-4-25 12:43  /  881 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在run中的while里我已经判断了如果i<=0就跳出循环了,为什么我运行后 输出到0后,过一会儿又会随机的输出,比如从50开始输出,50,49,48 ...这样,什么原因



public 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();
        }

}
class Ticket implements Runnable
{
        private int i=100;
        Object obj=new Object();
        public void run()
        {
                while(true)
                {
                        synchronized (obj)
                        {
                                if(i>0)
                                {
                                        try{Thread.sleep(10);}
                                        catch(Exception e){}
                                        System.out.println(Thread.currentThread().getName()+"sale........."+i--);
                                }

                               
                        }

                        if(i<=0)
                                break;
                }
               
        }
}

8 个回复

倒序浏览
你应该j是通过改变while的循环条件来结束循环。。而不是判断i。
回复 使用道具 举报
这个代码我试了下,打印到1之后就程序自动退出了……不会继续打印啊……
回复 使用道具 举报
小周务商 发表于 2014-4-25 12:50
你应该j是通过改变while的循环条件来结束循环。。而不是判断i。

我明白你的意思,但是我也可以通过break,直接跳出循环啊
回复 使用道具 举报
kuroro自走核炮 发表于 2014-4-25 12:54
这个代码我试了下,打印到1之后就程序自动退出了……不会继续打印啊……

不会吧,我用的eclipse  运行后过一会儿他又随机从一个数 慢慢输出
回复 使用道具 举报
没大神解答吗
回复 使用道具 举报
结贴,程序没问题是我看错了
回复 使用道具 举报
技术分挣得好快啊。这么快就26了。
回复 使用道具 举报
2528870651 发表于 2014-4-25 13:37
技术分挣得好快啊。这么快就26了。

我都一周没来了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马