黑马程序员技术交流社区

标题: 同步例子中的小问题 [打印本页]

作者: 黄丽慧    时间: 2012-7-26 16:08
标题: 同步例子中的小问题
同步视频中,买票的例子中
while(true)
                        {
                                synchronized(obj)//当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么
                                {
                                        if(tick>0)
                                         System.out.println(Thread.currentThread().getName()+"...on sale..."+tick--);
                                       //有必要在这里加上一句else  break;吗
                                }
                        }

有个小地方我感觉有点疑问,while循环中的值是true,当tick为0打印完以后,tick--计算后,tick为-1,不符合判断不打印,那程序是否会不停地在while语句和if语句间进行判断?

作者: 柳雷    时间: 2012-7-26 16:35
这就是一个死循环while(true){}就是用来不断执行循环体的。如果只有while没有其他的打断操作,或者循环结束的标志,就需要使用

来结束程序的运行。
break没有必要。因为这个循环体不可能一直占用CPU,或许有其他进程占用CPU,循环等这个进程执行完再执行。
作者: 黑马高明辉    时间: 2012-7-26 16:41
当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么//把锁去掉没卡死啊

作者: 罗宵    时间: 2012-7-26 17:25
while(true)
                         {
                                 synchronized(obj)//当不加锁的时候,eclipse会卡死,感觉有点像死循环,这是为什么
                                 {
                                         if(tick>0)
                                          System.out.println(Thread.currentThread().getName()+"...on sale..."+tick--);
                                        //有必要在这里加上一句else  break;吗
                                 }
                         }
while(true)如果不改变条件也不用break跳出的话就是一个死循环。if(tick>0)是说当tick>0,才满足条件,才会走if的内容。如果你去掉else{break},那就是当tick
=0了,不满足if条件了,所以不会走if了,但是while(true)还是满足的,循环还会继续。所以要在这里加个else{break}跳出while循环。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2