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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-3-14 09:02  /  1724 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo implements Runnable
{
        private int key =100;
        public void run()
        {        while(true)
                {if (key>0)
                {
                        System.out.println(Thread.currentThread().getName()+"::"+key--);
                }
                }
        }
}
class  A
{
        public static void main(String[] args)
        {
                Demo d=new Demo();
                        Thread t1=new Thread(d);
                        Thread t2=new Thread(d);
                        Thread t3=new Thread(d);
                        Thread t4=new Thread(d);
                        t1.start();
                        t2.start();
                        t3.start();
                        t4.start();
        }
}为什么要用while(true)判断正确才能运行呢,不写while为什么就不行了啊? 请大家指教一下

评分

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

查看全部评分

7 个回复

正序浏览
不while true 运行一次线程的生命周期就结束了,为了让线程存活,看到cpu在他们中间切换,所以就那样了,
回复 使用道具 举报
while(true)的作用就是循环。不用while循环的话,每个进程执行一次,就结束了。你可以把上面的while(true)和if(key>0)合并成:while(key>0),这样试试,效果应该是一样的。
回复 使用道具 举报
并不是有while(true) 判断才是正确的,它与多线程没有关系,将打印语句放在while循环中,只是为了显示多线程中当前运行的是哪个线程。用for循环也可以
  1. for(int x=100; x>0; x--)
  2. {
  3.         System.out.println(Thread.currentThread().getName());
  4. }
复制代码
回复 使用道具 举报
while(true)一般是范例,或者简写,或者一些一直要运行的线程,最重要的是明白,线程就是一条流水线,从头走到尾,所以说线程不是非要while的,看需求,你可以写for循环都可以,循环的次数多,更多突显线程的作用而已

评分

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

查看全部评分

回复 使用道具 举报
谢谢  现在明白多了   嘿嘿
回复 使用道具 举报
多线程函数和有While(true)没有关系!

我写的多线程函数很多都没有While(true),只是你看到的多线程函数里面有While(true),就认为多线程函数需要While(true),只是不对的,犹如瞎子摸象,看到啥就是啥!

程序代码是根据需要而写的,不是人家写什么你就写什么,你以后会遇到需要While(true)的时候的。比如说你的程序需要一直监控某个东西,一般都是每隔一段时间去看看什么情况,除了可以使用定时器去做,还可以就是新建一个线程,在这个线程搜索里面就是一个While(true)的死循环。

for循环和while循环其实差不多,for能实现的while也能实现,反之亦然
至于为什么要while(true),举个简单的例子,监控程序就需要一个死循环,来实现24小时不间隔运行,比如:
while(true){
// 执行监控,发现问题时进行邮件报警等
Thread.Sleep(1000);// 休眠一秒钟,再进行下一次检测
}

while(true){
//死循环,一直执行这里的代码不间断
}

if(true){
//不是循环,这里的代码只执行一次
}

回复 使用道具 举报
...使用循环让他每一个线程的生命周期变长,如果不使用while也是一个一样的只是每一个线程的生命从上到下执行完了就结束了,这里只是使用循环来反应线程,并不是说线程中非得有循环;应该忽略次要的东西,抓住实质
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马