黑马程序员技术交流社区

标题: 多线程程序问题 [打印本页]

作者: 郑世光    时间: 2012-8-26 11:16
标题: 多线程程序问题
1  老毕视频中的程序,在类Ticket中,加的while(true){.....}是做什么的?看不懂。
2  这段代码在我电脑上运行时会卡住,cpu都到100%了!!!还没执行完。

class Ticket implements Runnable//extends Thread
{
        private  int tick = 100;
        public void run()
        {
                while(true)
                {
                        if(tick>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
                        }
                }
        }
}


class  TicketDemo
{
        public static void main(String[] args)
        {

                Ticket t = new Ticket();

                Thread t1 = new Thread(t);//创建了一个线程;
                Thread t2 = new Thread(t);//创建了一个线程;
                Thread t3 = new Thread(t);//创建了一个线程;
                Thread t4 = new Thread(t);//创建了一个线程;
                t1.start();
                t2.start();
                t3.start();
                t4.start();

        }
}
作者: 周兴华    时间: 2012-8-26 11:19
加while(true){.....}的目的是便于观察结果,找出程序安全问题。
作者: 杨鹏鹏    时间: 2012-8-26 11:42
本帖最后由 杨鹏鹏 于 2012-8-26 11:46 编辑

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


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

if(true){
//不是循环,这里的代码只执行一次
}
电脑CPU怎么卡呢?让线程停止就行了
if(tick>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
                        }
                        else{
                                break;
                        }

作者: 黑马_许芸    时间: 2012-8-26 11:52
在  Ticket t = new Ticket();

                Thread t1 = new Thread(t);//创建了一个线程;
                Thread t2 = new Thread(t);//创建了一个线程;
                Thread t3 = new Thread(t);//创建了一个线程;
                Thread t4 = new Thread(t);//创建了一个线程;
                t1.start();
                t2.start();
                t3.start();
                t4.start();
这是一个多线程的程序


while(true){.....}这样做的目的 是为了验证多线程执行的顺序。

又因为while(true)是一个无限循环语句。所以不可能执行完成的,所以你的cpu 达到了100% 是很正常的。
作者: 杨卫腾    时间: 2012-8-26 11:56
这样做是为了找出多线程状态下运行程序时的安全问题, 多线程安全问题有时候很隐蔽的,就在某次偶然说不定就出现了,要是出现了就要了命了,所以在学习的时候我们都选择了死循环让程序一直运行,这样就能看出程序中的问题所在。
至于你说的CUP100%占有率,那是咱们这个程序几乎占有了处理器的所有资源了。
作者: 唐见    时间: 2012-8-26 11:57
run方法中的while(true){...}是个死循环,当然执行不完了。
作者: 郑世光    时间: 2012-8-26 13:33
谢谢各位的回答。怎么将帖子标为已解决?
作者: 吴通    时间: 2012-8-26 21:05
就是让现成一直运算,老师是想让我们看现象

作者: 吴通    时间: 2012-8-26 21:06
你不强制停止,计算机就会一直运算,因为一直满足while循环条件




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