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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© love~陌 中级黑马   /  2014-3-17 11:50  /  962 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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, 下载次数: 2)

TicketDemo2.png

评分

参与人数 1黑马币 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
因为你在同步代码块上加上了while(true) 无限循环,当在循环到tick=0的时候就结束了 输出就结束了  但是还在循环

评分

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

查看全部评分

回复 使用道具 举报
while(true)此处是死循环 ,线程在一直运行。所以要强制停止

评分

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

查看全部评分

回复 使用道具 举报
while(true){}这是无限循环语句啊,你换个条件就行了

评分

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

查看全部评分

回复 使用道具 举报
亲,你在run里面用的是死循环的吗,当ticket减到0以后,线程一直都在循环的吗,
if(tick>0)
{
         System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
else {
        beak;//当票数减到0以后则退出循环
}

评分

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

查看全部评分

回复 使用道具 举报
同楼上,你可以换一个循环语句,如:for(int i = 0; i<= 1000; i++)试试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马