你这个代码有点问题,每一个线程开启就是100张票,没有真正意义上的达到共享数据,
当tickt>0的时候,tickt--,当然会出现0号票,可以对这个代码进行改进,如果你不想把票数写死,可以再初始化的时候指定,
package com.itheima.tickt;
public class TicktData {
private int tickt = 100;
/*出票方法*/
public int sail()
{
return tickt--;
}
/*查票方法*/
public int cha()
{
return 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());
}
}
}
}
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();
}
}