黑马程序员技术交流社区

标题: 这个同时卖票的多线程程序,票卖完了,程序没有结束 [打印本页]

作者: jinsedeyuzhou    时间: 2015-5-23 10:39
标题: 这个同时卖票的多线程程序,票卖完了,程序没有结束
class Ticket extends Thread
{
    private static int tick=100;
   
    public void run()
    {
        while(true)
            if(tick>0)
                System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
    }
}
class  TicketTest
{
    public static void main(String[] args)
    {
        //创建四个线程,实现多窗口同时卖票。
        Ticket t1=new Ticket();
        Ticket t2=new Ticket();
        Ticket t3=new Ticket();
        Ticket t4=new Ticket();
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        
        System.out.println("over");
    }
}



作者: feng0606    时间: 2015-5-23 11:17
同问啊,昨晚刚看到这个多线程,每次运行后都没强制结束,结果电脑发热的不行.
作者: thoris    时间: 2015-5-23 11:58
因为老毕用了ctrl+c...
没有加循环关闭的话  可以自己在任务管理器关掉javaw
作者: 途中ms前进    时间: 2015-5-23 12:00
用ctrl+c吧
作者: 南山忆    时间: 2015-5-23 12:27
加一个判断里面来结束线程
作者: 348532020    时间: 2015-5-23 12:36
围观大神回答
作者: xmmsbb    时间: 2015-5-23 19:09
while(true)是一个无线循环。需要强制停止,ctrl+c中止
作者: qq496099229    时间: 2015-5-23 19:28
本帖最后由 qq496099229 于 2015-5-23 19:29 编辑

你可以在if后面加上
else{
       break;     
}
就会结束了

只解决你当前的问题而已。
但是还没有解决共享数据tick的同步问题。希望能帮到你!同步自己试试!

作者: haoguan10    时间: 2015-5-23 19:36
先围观下大神回答
作者: ZSMAN    时间: 2015-5-23 22:24
qq496099229 发表于 2015-5-23 19:28
你可以在if后面加上
else{
       break;     

不好意思,刚刚手滑了,点到了“反对”,I'm sorry~{:2_44:}
作者: sss18310878521    时间: 2015-5-23 22:35
为什办要这样写呢?你直接用while(tick>o)
作者: jinsedeyuzhou    时间: 2015-5-23 22:39
sss18310878521 发表于 2015-5-23 22:35
为什办要这样写呢?你直接用while(tick>o)

老毕的视频里面的
作者: qq496099229    时间: 2015-5-23 22:46
ZSMAN 发表于 2015-5-23 22:24
不好意思,刚刚手滑了,点到了“反对”,I'm sorry~

没事,有什么问题都可以探讨的嘛。
作者: sss18310878521    时间: 2015-5-23 22:58
jinsedeyuzhou 发表于 2015-5-23 22:39
老毕的视频里面的

难道while(tick>0)不能实现吗?你那样写肯定是死循环,你只是结束了if判断语句,但是并没有跳出那个while循环,懂吗?
作者: jinsedeyuzhou    时间: 2015-5-24 09:07
sss18310878521 发表于 2015-5-23 22:58
难道while(tick>0)不能实现吗?你那样写肯定是死循环,你只是结束了if判断语句,但是并没有跳出那个while ...

可以的,他这个测试的是不和谐的那个情况
作者: jinsedeyuzhou    时间: 2015-5-24 09:08
thoris 发表于 2015-5-23 11:58
因为老毕用了ctrl+c...
没有加循环关闭的话  可以自己在任务管理器关掉javaw

我说呢,他的居然正常,我也是Ctrl+c才关闭循环的
作者: KK要有光    时间: 2015-5-26 23:09
synchronized(this){}
作者: KK要有光    时间: 2015-5-26 23:11
synchronized(this){ if(tick>0)
                System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
               else
                    break;
}
作者: h782205380    时间: 2015-5-26 23:22
很高端的样子




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