黑马程序员技术交流社区
标题:
while(true)问题
[打印本页]
作者:
孙娜
时间:
2013-3-13 16:14
标题:
while(true)问题
本帖最后由 孙娜 于 2013-3-13 23:45 编辑
售票例子中有这样一段代码:
class Ticket implements Runnable
{
private int tick=100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"==="+tick--);
}
}
}
}
复制代码
其中while(true)里面的代码会一直循环执行下去。虽然有一个if语句判断,即使不符合if条件了,while还是会一直循环,只是不执行语句了而已,这样好吗?没有问题吗?
作者:
黑马-郑玉元
时间:
2013-3-13 16:20
显然不好呀,定义一个变量用来标记下,如果有票为true,没票为false。
把你的true用下面的flag替代,代码可以是这样:
boolean flag=true;
if(tick>0){
flag=true;
}else{
flag=false;
}
作者:
杨杨
时间:
2013-3-13 18:30
我在看的时候改成break了
i
作者:
汪平乐
时间:
2013-3-13 19:06
那么麻烦,就上边的代码的功能可以直接用while写
while(ticket >0)
{
System.out.println(Thread.currentThread().getName()+"==="+tick--);
}
复制代码
作者:
陈腾跃_2013
时间:
2013-3-13 20:43
这个只是演示用的程序,关键是main函数中还要创建线程和调用start方法开启线程。
而且后续有一个例子是涉及线程同步的(synchornized):有两个锁,演示死锁的。有一个方法就是放在while循环中解决死锁。
仅供参考,欢迎拍砖
public void run()
{
if(flag == true)
{
while(true)
{
synchronized(MyLock.lockA)
{
System.out.println(Thread.currentThread().getName()+"--if---A");
synchronized(MyLock.lockA)
{
System.out.println(Thread.currentThread().getName()+"--if---A");
}
}
}
}
else
{
while(true)
{
synchronized(MyLock.lockB)
{
System.out.println(Thread.currentThread().getName()+"--else---B");
synchronized(MyLock.lockB)
{ System.out.println(Thread.currentThread().getName()+"--else---B");
}
}
}
}
}
………………
复制代码
作者:
陈丽莉
时间:
2013-3-13 22:49
若仍有问题,请继续追问;没问题的话,请将帖子的分类改成【已解决】~
作者:
王新年
时间:
2014-1-6 13:14
这是不好的!虽然在while循环中没有代码在循环,这段程序还在一直运行,如果在while下面还有其它代码的话,那么这段代码将会永远得不到运行,同时这样将会造成严重的资源浪费!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2