黑马程序员技术交流社区

标题: while(true)问题 [打印本页]

作者: 孙娜    时间: 2013-3-13 16:14
标题: while(true)问题
本帖最后由 孙娜 于 2013-3-13 23:45 编辑

售票例子中有这样一段代码:
  1. class Ticket implements Runnable
  2. {
  3. private int tick=100;
  4. public void run()
  5. {
  6. while(true)
  7. {
  8. if(tick>0)
  9. {
  10. System.out.println(Thread.currentThread().getName()+"==="+tick--);
  11. }
  12. }
  13. }
  14. }
复制代码
其中while(true)里面的代码会一直循环执行下去。虽然有一个if语句判断,即使不符合if条件了,while还是会一直循环,只是不执行语句了而已,这样好吗?没有问题吗?

作者: 黑马-郑玉元    时间: 2013-3-13 16:20
显然不好呀,定义一个变量用来标记下,如果有票为true,没票为false。
把你的true用下面的flag替代,代码可以是这样:
boolean flag=true;
if(tick>0){
    flag=true;
}else{
    flag=false;
}
作者: 杨杨    时间: 2013-3-13 18:30
我在看的时候改成break了
i
作者: 汪平乐    时间: 2013-3-13 19:06
那么麻烦,就上边的代码的功能可以直接用while写
  1. while(ticket >0)
  2. {
  3. System.out.println(Thread.currentThread().getName()+"==="+tick--);

  4. }
复制代码

作者: 陈腾跃_2013    时间: 2013-3-13 20:43
这个只是演示用的程序,关键是main函数中还要创建线程和调用start方法开启线程。

而且后续有一个例子是涉及线程同步的(synchornized):有两个锁,演示死锁的。有一个方法就是放在while循环中解决死锁。
仅供参考,欢迎拍砖
  1. public void run()
  2.          {
  3.                         
  4.                          if(flag == true)
  5.                         {
  6.                                  while(true)
  7.                                  {
  8.                                          synchronized(MyLock.lockA)
  9.                                          {
  10.                                                  System.out.println(Thread.currentThread().getName()+"--if---A");
  11.                                                  synchronized(MyLock.lockA)
  12.                                                  {
  13.                                                  System.out.println(Thread.currentThread().getName()+"--if---A");
  14.                                                  }
  15.                                          }
  16.                                  }
  17.                          }
  18.                          else
  19.                          {
  20.                                  while(true)
  21.                                  {
  22.                                          synchronized(MyLock.lockB)
  23.                                          {
  24.                                                  System.out.println(Thread.currentThread().getName()+"--else---B");
  25.                                                  synchronized(MyLock.lockB)
  26. {                                                                  System.out.println(Thread.currentThread().getName()+"--else---B");
  27.                                                  }
  28.                                          }
  29.                                  }
  30.                          }
  31.          }
  32. ………………
复制代码

作者: 陈丽莉    时间: 2013-3-13 22:49
若仍有问题,请继续追问;没问题的话,请将帖子的分类改成【已解决】~
作者: 王新年    时间: 2014-1-6 13:14
这是不好的!虽然在while循环中没有代码在循环,这段程序还在一直运行,如果在while下面还有其它代码的话,那么这段代码将会永远得不到运行,同时这样将会造成严重的资源浪费!!




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