public class SellTicket {
public static void main(String[] args) {
SellTicket03 sellTicket03 = new SellTicket03();
new Thread(sellTicket03).start();//第一个线程
new Thread(sellTicket03).start();//第二个线程
new Thread(sellTicket03).start();//第三个线程
}
}
//实现接口方式,使用synchronized实现线程同步
class SellTicket03 implements Runnable{
private static int num = 100;
private boolean loop = true;
public synchronized void sell(){//使用同步方法,在同一时刻,只能有一个线程来操作sell方法
if(num <= 0){
System.out.println("没票了");
loop = false;
return;
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口"+ Thread.currentThread().getName() + "卖出了一张票,剩余" + (--num));
}
@Override
public void run() {
while (loop){
sell();//是一个同步方法
}
}
}
你把票的数量增多
不要使用sleep,sleep方法会释放cpu资源,但是不会释放锁,其他线程无法获取到锁,只有一个线程可以持有锁运行,换用wait方法