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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙娜 中级黑马   /  2013-3-13 16:14  /  2811 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙娜 于 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还是会一直循环,只是不执行语句了而已,这样好吗?没有问题吗?

评分

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

查看全部评分

6 个回复

倒序浏览
显然不好呀,定义一个变量用来标记下,如果有票为true,没票为false。
把你的true用下面的flag替代,代码可以是这样:
boolean flag=true;
if(tick>0){
    flag=true;
}else{
    flag=false;
}

评分

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

查看全部评分

回复 使用道具 举报
我在看的时候改成break了
i
回复 使用道具 举报
那么麻烦,就上边的代码的功能可以直接用while写
  1. while(ticket >0)
  2. {
  3. System.out.println(Thread.currentThread().getName()+"==="+tick--);

  4. }
复制代码
回复 使用道具 举报
这个只是演示用的程序,关键是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. ………………
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

回复 使用道具 举报
若仍有问题,请继续追问;没问题的话,请将帖子的分类改成【已解决】~
回复 使用道具 举报
这是不好的!虽然在while循环中没有代码在循环,这段程序还在一直运行,如果在while下面还有其它代码的话,那么这段代码将会永远得不到运行,同时这样将会造成严重的资源浪费!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马