黑马程序员技术交流社区

标题: 多线程代码运行的一个问题 [打印本页]

作者: love~陌    时间: 2014-3-17 11:50
标题: 多线程代码运行的一个问题
  1. class Ticket implements Runnable
  2. {
  3.         private  int tick = 1000;
  4.         Object obj = new Object();
  5.         public void run()
  6.         {
  7.                 while(true)
  8.                 {
  9.                         synchronized(obj)
  10.                         {
  11.                                 if(tick>0)
  12.                                 {
  13.                                         System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18. }
  19. class  TicketDemo2
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Ticket t = new Ticket();
  24.                 Thread t1 = new Thread(t);
  25.                 Thread t2 = new Thread(t);
  26.                 Thread t3 = new Thread(t);
  27.                 Thread t4 = new Thread(t);
  28.                 t1.start();
  29.                 t2.start();
  30.                 t3.start();
  31.                 t4.start();
  32.         }
  33. }
复制代码
假设我的文件存储路径为
E:\code
在DOS命令行窗口下,应该这样子
E:\code>javac TicketDemo2.java
E:\code>java TicketDemo2
程序运行完毕,DOS命令行窗口应该会停留在
E:\code>
这里,等待我输入下一个指令

以前都是这样子的,但是现在我学习到多线程,运行代码的时候,
每次都需要我自己强制停止一次程序运行才会结束。
求解释。

TicketDemo2.png (78.19 KB, 下载次数: 19)

TicketDemo2.png

作者: 学习代码    时间: 2014-3-17 12:10
因为你在同步代码块上加上了while(true) 无限循环,当在循环到tick=0的时候就结束了 输出就结束了  但是还在循环
作者: vtming    时间: 2014-3-17 12:12
while(true)此处是死循环 ,线程在一直运行。所以要强制停止
作者: 菜小徐    时间: 2014-3-17 12:13
while(true){}这是无限循环语句啊,你换个条件就行了
作者: 王竞    时间: 2014-3-17 13:24
亲,你在run里面用的是死循环的吗,当ticket减到0以后,线程一直都在循环的吗,
if(tick>0)
{
         System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
else {
        beak;//当票数减到0以后则退出循环
}

作者: 汗血黑马    时间: 2014-3-17 13:47
同楼上,你可以换一个循环语句,如:for(int i = 0; i<= 1000; i++)试试。




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