51,411
社区成员
发帖
与我相关
我的任务
分享
class SellTicket implements Runnable {
private int ticketNum = 100;
@Override
public void run() {
while(true) {
synchronized (this) {
if (ticketNum == 0)
break;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "还剩" + ticketNum-- + "张票");
}
}
}
}
SellTicket st = new SellTicket();
Thread t1 = new Thread(st,"售票口1");
Thread t2 = new Thread(st,"售票口2");
Thread t3 = new Thread(st,"售票口3");
Thread t4 = new Thread(st,"售票口4");
t1.start();
t2.start();
t3.start();
t4.start();



try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
这段代码挪出同步块就好了,你在同步块里sleep,其他线程也拿不到锁的,出了同步块再sleep就好了