黑马程序员技术交流社区
标题:
同步例子中的小问题
[打印本页]
作者:
黄丽慧
时间:
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没有其他的打断操作,或者循环结束的标志,就需要使用
11.png
(15.08 KB, 下载次数: 35)
下载附件
2012-7-26 16:36 上传
来结束程序的运行。
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