黑马程序员技术交流社区

标题: 关于多线程的问题 [打印本页]

作者: 学习代码    时间: 2014-3-14 09:02
标题: 关于多线程的问题
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为什么就不行了啊? 请大家指教一下
作者: 戒爱    时间: 2014-3-14 09:09
...使用循环让他每一个线程的生命周期变长,如果不使用while也是一个一样的只是每一个线程的生命从上到下执行完了就结束了,这里只是使用循环来反应线程,并不是说线程中非得有循环;应该忽略次要的东西,抓住实质
作者: mohuancaizi    时间: 2014-3-14 09:39
多线程函数和有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){
//不是循环,这里的代码只执行一次
}


作者: 学习代码    时间: 2014-3-14 10:33
谢谢  现在明白多了   嘿嘿
作者: daoyua    时间: 2014-3-14 16:24
while(true)一般是范例,或者简写,或者一些一直要运行的线程,最重要的是明白,线程就是一条流水线,从头走到尾,所以说线程不是非要while的,看需求,你可以写for循环都可以,循环的次数多,更多突显线程的作用而已
作者: 也许依然    时间: 2014-3-15 08:53
并不是有while(true) 判断才是正确的,它与多线程没有关系,将打印语句放在while循环中,只是为了显示多线程中当前运行的是哪个线程。用for循环也可以
  1. for(int x=100; x>0; x--)
  2. {
  3.         System.out.println(Thread.currentThread().getName());
  4. }
复制代码

作者: luoanjade    时间: 2014-3-15 11:17
while(true)的作用就是循环。不用while循环的话,每个进程执行一次,就结束了。你可以把上面的while(true)和if(key>0)合并成:while(key>0),这样试试,效果应该是一样的。
作者: 胡文彬    时间: 2014-3-15 15:57
不while true 运行一次线程的生命周期就结束了,为了让线程存活,看到cpu在他们中间切换,所以就那样了,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2