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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘士林 中级黑马   /  2012-11-4 00:18  /  4482 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师在讲多线程时,经常会写如下代码
public void run ()
{
    while(true)//为什么能直接把true传进去?
    {
        synchronized(obj)
        {
           循环代码;
         }

    }

}
不明白while的循环条件表达式true是怎么来的,true是boolean的一个值,
没定义boolean型的变量,怎么就直接用true了呢?
如果一直是true,那就一直循环,怎么结束循环?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

5 个回复

倒序浏览
不用定义变量,可以直接用true。在while中有判断语句,比如if(){break;},可以停止循环。要是没有的话就是一直循环下去,想停止的时候按ctrl+c
回复 使用道具 举报
while的循环条件本质上就是true和false两个,当然可以直接写true了。。。假如写的是int i = 10;while(i>5){},这里的i>5实际返回值就是true,你可以print一下看看结果
while(true){}表示无限循环,for(,,){}也表示无限循环
回复 使用道具 举报
while循环语句的循环条件语句其实是个判断表达式,判断表达式的结果只有两个,要么true,要么false,所以当然可以直接写true了。
至于怎样使同步线程结束,这就要看
线程操作的资源有没有耗尽(以售票那个例子为例)
  1. class Ticket implements Runnable
  2. {
  3.         private  int tick = 1000;
  4.         Object obj = new Object();
  5.         public void run()
  6.         {
  7.                 while(true)
  8.                 {
  9.                         synchronized(obj)
  10.                         {
  11. //当票还有剩余的时候,就继续线程的循环;如果票没了,就结束线程的循环
  12.            if(tick>0)
  13.            {
  14.                                         //try{Thread.sleep(10);}catch(Exception e){}
  15.                                         System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
  16.                                 }
  17.                         }
  18.                 }
  19.         }
  20. }
复制代码
或者在while中加了if语句和结束循环的关键字,比如continue(结束本次循环,进入下次循环)、break(结束整个循环)、return(也可以,只不过它是跳到调用循环所在方法的方法那里,不严格来说也算结束了循环),比如if(条件表达式){break;}
当然,你也可以CRTL+C
回复 使用道具 举报
老师视频中的while循环条件用true 表示该循环是无限循环 在运行时要要CRTL+C 结束循环,老师这样做是为了方便给我们演示,用循环的次数的不同来体现多线程的随机性。
回复 使用道具 举报
true是一个值。并不是变量。所以这个循环是死循环。 因为一般线程需要一直监听。所以才用true
但是如果你想在达到某个条件的时候终止。可以定义一个boolean flag=true;
然后达到某个条件就把flag置为false;这样线程就能控制了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马