作者: 谢冬 时间: 2013-3-25 15:13
没有结束循环的语句,while(true)当然不会结束,其实这个代码没有真正的达到共享数据,每new一个线程,就多出1000张票,可以改进:
package com.itheima.tickt;
public class TicktData {
private int tickt = 1000;
/*出票方法*/
public int sail()
{
return tickt--;
}
/*查票方法*/
public int cha()
{
return tickt;
}
}
package com.itheima.tickt;
public class TicktWindow extends Thread{
private TicktData td;
boolean flag = true;
public TicktWindow(TicktData td)
{
this.td = td;
}
public void run()
{
while(true)
{
synchronized(td){
if(td.cha() < 1)
break;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "..." + td.sail());
}
}
}
}
package com.itheima.tickt;
public class TicketDemo {
public static void main(String[] args) {
TicktData td = new TicktData();
new TicktWindow(td).start();
new TicktWindow(td).start();
new TicktWindow(td).start();
new TicktWindow(td).start();
}
}作者: 黑马朱超 时间: 2013-3-25 15:17
首先说说程序停不下来的问题:因为你的输出语句被while(true){}包含了,这是个无线循环呀,当时毕老师视频里面停下来是因为他使用CTRll+C 强制退出了的。听视频要留意老师的小动作,他有提示的
再说说你tick变负数后的问题,你if语句的中括号{}呢?你没有中括号的话,那个输出语句一定会执行的撒作者: HM马明宇 时间: 2013-3-25 15:36