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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑世光 中级黑马   /  2012-8-26 11:16  /  2543 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();

        }
}

评分

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

查看全部评分

8 个回复

倒序浏览
加while(true){.....}的目的是便于观察结果,找出程序安全问题。
回复 使用道具 举报
本帖最后由 杨鹏鹏 于 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;
                        }
回复 使用道具 举报
在  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% 是很正常的。
回复 使用道具 举报
这样做是为了找出多线程状态下运行程序时的安全问题, 多线程安全问题有时候很隐蔽的,就在某次偶然说不定就出现了,要是出现了就要了命了,所以在学习的时候我们都选择了死循环让程序一直运行,这样就能看出程序中的问题所在。
至于你说的CUP100%占有率,那是咱们这个程序几乎占有了处理器的所有资源了。
回复 使用道具 举报
run方法中的while(true){...}是个死循环,当然执行不完了。
回复 使用道具 举报
谢谢各位的回答。怎么将帖子标为已解决?
回复 使用道具 举报
吴通 中级黑马 2012-8-26 21:05:06
8#
就是让现成一直运算,老师是想让我们看现象
回复 使用道具 举报
吴通 中级黑马 2012-8-26 21:06:09
9#
你不强制停止,计算机就会一直运算,因为一直满足while循环条件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马