黑马程序员技术交流社区
标题:
多线程中while循环条件的设定问题
[打印本页]
作者:
刘士林
时间:
2012-11-4 00:18
标题:
多线程中while循环条件的设定问题
毕老师在讲多线程时,经常会写如下代码
public void run ()
{
while(true)//为什么能直接把true传进去?
{
synchronized(obj)
{
循环代码;
}
}
}
不明白while的循环条件表达式true是怎么来的,true是boolean的一个值,
没定义boolean型的变量,怎么就直接用true了呢?
如果一直是true,那就一直循环,怎么结束循环?
作者:
黑马贾林栋
时间:
2012-11-4 00:49
不用定义变量,可以直接用true。在while中有判断语句,比如if(){break;},可以停止循环。要是没有的话就是一直循环下去,想停止的时候按ctrl+c
作者:
颜峰
时间:
2012-11-4 01:12
while的循环条件本质上就是true和false两个,当然可以直接写true了。。。假如写的是int i = 10;while(i>5){},这里的i>5实际返回值就是true,你可以print一下看看结果
while(true){}表示无限循环,for(,,){}也表示无限循环
作者:
杨志男
时间:
2012-11-4 11:08
while循环语句的循环条件语句其实是个判断表达式,判断表达式的结果只有两个,要么true,要么false,所以当然可以直接写true了。
至于怎样使同步线程结束,这就要看
线程操作的资源有没有耗尽(以售票那个例子为例)
class Ticket implements Runnable
{
private int tick = 1000;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
//当票还有剩余的时候,就继续线程的循环;如果票没了,就结束线程的循环
if(tick>0)
{
//try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
}
}
}
}
复制代码
或者在while中加了if语句和结束循环的关键字,比如continue(结束本次循环,进入下次循环)、break(结束整个循环)、return(也可以,只不过它是跳到调用循环所在方法的方法那里,不严格来说也算结束了循环),比如if(条件表达式){break;}
当然,你也可以CRTL+C
作者:
梁枝武
时间:
2012-11-4 20:14
老师视频中的while循环条件用true 表示该循环是无限循环 在运行时要要CRTL+C 结束循环,老师这样做是为了方便给我们演示,用循环的次数的不同来体现多线程的随机性。
作者:
陈军
时间:
2012-11-5 11:06
true是一个值。并不是变量。所以这个循环是死循环。 因为一般线程需要一直监听。所以才用true
但是如果你想在达到某个条件的时候终止。可以定义一个boolean flag=true;
然后达到某个条件就把flag置为false;这样线程就能控制了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2