java多线程模拟窗口售票过程
package com.ctgu.testThread;
public class BuyTicketsThread implements Runnable{
private int totalTickets = 20;
public void saleTickets(){
synchronized (this) {
if(totalTickets > 0){
String curName = Thread.currentThread().getName();
System.out.println(curName + " 卖出第 " + totalTickets + " 张票");
totalTickets--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}public synchronized void saleTickets2(){
if(totalTickets > 0){
String curName = Thread.currentThread().getName();
System.out.println(curName + " 卖出第 " + totalTickets + " 张票");
totalTickets--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}@Override
public void run() {
while(totalTickets > 0){
saleTickets();
}}public static void main(String[] args) {
BuyTicketsThread bt = new BuyTicketsThread();
Thread t1 = new Thread(bt, "窗口1");
Thread t2 = new Thread(bt, "窗口2");
Thread t3 = new Thread(bt, "窗口3");
Thread t4 = new Thread(bt, "窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
【java多线程模拟窗口售票过程】}
运行结果:
窗口1 卖出第 20 张票
窗口1 卖出第 19 张票
窗口1 卖出第 18 张票
窗口1 卖出第 17 张票
窗口1 卖出第 16 张票
窗口2 卖出第 15 张票
窗口4 卖出第 14 张票
窗口4 卖出第 13 张票
窗口3 卖出第 12 张票
窗口3 卖出第 11 张票
窗口3 卖出第 10 张票
窗口3 卖出第 9 张票
窗口3 卖出第 8 张票
窗口3 卖出第 7 张票
窗口3 卖出第 6 张票
窗口3 卖出第 5 张票
窗口3 卖出第 4 张票
窗口4 卖出第 3 张票
窗口4 卖出第 2 张票
窗口4 卖出第 1 张票
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 事件代理