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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤姆纳斯 高级黑马   /  2014-6-22 13:19  /  1688 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤姆纳斯 于 2014-6-22 13:51 编辑
  1. class SaleTickets implements Runnable
  2. {
  3.         private int tickets=100;
  4.         public void run ()
  5.         {
  6.                 while (true)
  7.         {
  8.                         if (tickets>0)
  9.                         {
  10.                                 System.out.println(Thread.currentThread().getName()+"....."+tickets--);
  11.                         }
  12.         }
  13.         }
  14. }
  15. class TicketsDemo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 SaleTickets t=new SaleTickets();
  20.                 //创建线程。通过Thread类对象。
  21.                 Thread t1=new Thread(t);
  22.                 Thread t2=new Thread(t);
  23.         Thread t3=new Thread(t);
  24.         Thread t4=new Thread(t);
  25.                 t1.start();
  26.                 t2.start();
  27.                 t3.start();
  28.                 t4.start();


  29.         }
  30. }
复制代码
这段代码是毕老师视频里的,但我运行完之后程序却一直没结束,结尾一直是光标在闪,这是为什么?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 黎志勇 于 2014-6-22 13:32 编辑

        public void run ()
        {
                while (true)
        {
                        if (tickets>0)
                        {
                                System.out.println(Thread.currentThread().getName()+"....."+tickets--);
                        }
        }
        }

因为你这里用了true作为while循环的判断条件,而且循环体里面也没有 break; 结束循环,也就是定义了个死循环,就算后面tickets为0后,不执行if语句,但依然无法跳出while循环,程序会一直运行而无法结束

评分

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

查看全部评分

回复 使用道具 举报 1 0
黎志勇 发表于 2014-6-22 13:30
public void run ()
        {
                while (true)

但老师的代码也是这个啊,为什么老师的没有这样呢
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-6-22 13:42 编辑
汤姆纳斯 发表于 2014-6-22 13:38
但老师的代码也是这个啊,为什么老师的没有这样呢

我就不记得老师是怎么的了,你再加个else语句跳出循环吧。
while (true)
{
    if (tickets>0)
    {
         System.out.println(Thread.currentThread().getName()+"....."+tickets--);
    }
    else
    {
        break;
    }

}
回复 使用道具 举报
黎志勇 发表于 2014-6-22 13:40
我就不记得老师是怎么的了,你再加个else语句跳出循环吧。
while (true)
{

我知道了,老师的也是没结束,按了Control +C键才结束的。
回复 使用道具 举报
汤姆纳斯 发表于 2014-6-22 13:51
我知道了,老师的也是没结束,按了Control +C键才结束的。

嗯,我也是按ctrl+c结束了,要不CPU占用率100%。
回复 使用道具 举报
貌似问题解决了,恭喜了,我同意楼上说的,加一个else,提供跳出循环的命令,也许有其他的暂时没想到
回复 使用道具 举报
我运行的时候也有这种问题
回复 使用道具 举报
本帖最后由 ‍杨博 于 2014-6-22 14:13 编辑

解决了...
回复 使用道具 举报
本帖最后由 ‍杨博 于 2014-6-22 14:20 编辑

再提供一个修改方法吧

  1. while (tickets > 0) {
  2.                                 System.out.println(Thread.currentThread().getName() + "....."
  3.                                                 + tickets--);
  4.                 }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马