售票问题
共有 100 张票,创建 3 个线程同时售这 100 张票。
执行会出现 “ 超卖 ” 情况:即剩余票数为 负 的情况
package thread_;
/**
* @Author: Gin
* @Description:
* @Modified By: Gin
* @Date: Created in 9:16 2021/9/27
*/
public class Thread04 {
public static void main(String[] args) {
// SellTickets01 sellTickets1 = new SellTickets01();
// SellTickets01 sellTickets2 = new SellTickets01();
// SellTickets01 sellTickets3 = new SellTickets01();
//
// sellTickets1.start();
// sellTickets2.start();
// sellTickets3.start();
SellTickets02 sellTickets02 = new SellTickets02();
new Thread(sellTickets02).start();
new Thread(sellTickets02).start();
new Thread(sellTickets02).start();
}
}
class SellTickets01 extends Thread{
private static int ticketsNum = 100;
@Override
public void run() {
while(true){
if(ticketsNum <= 0){
System.out.println("售票结束...");
break;
}
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口 " + Thread.currentThread().getName() + " 售出一张票,剩余票数 " + (--ticketsNum));
}
}
}
class SellTickets02 implements Runnable{
private int ticketsNum = 100;
@Override
public void run() {
while (true){
if(ticketsNum <= 0){
System.out.println("售票结束...");
break;
}
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("窗口 " + Thread.currentThread().getName() + " 售出一张票,剩余票数 " + (--ticketsNum));
}
}
}
通过线程同步机制解决以上 “ 超卖 ” 问题:
https://blog.csdn.net/qq_43575044/article/details/120509392