进阶day06-线程安全-卖票案例的实现

This commit is contained in:
2026-03-07 14:55:26 +08:00
parent bb595f2be5
commit 0e35a38c3c
2 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
package com.inmind.thread_safe04;
/*
我们通过一个案例,演示线程的安全问题:
电影院要卖票,我们模拟电影院的卖票过程。假设要播放的电影是 “葫芦娃大战奥特曼”本次电影的座位共100个(本场电影只能卖100张票)。
我们来模拟电影院的售票窗口,实现多个窗口同时卖 “葫芦娃大战奥特曼”这场电影票(多个窗口一起卖这100张票)
需要窗口采用线程对象来模拟需要票Runnable接口子类来模拟
分析:
一个卖100张票的任务Runnable接口表示
3个窗口来卖3个线程
*/
public class Demo04 {
public static void main(String[] args) {
//创建3个窗口来执行同一个任务
TicketTask ticketTask = new TicketTask();
new Thread(ticketTask,"窗口1").start();
new Thread(ticketTask,"窗口2").start();
new Thread(ticketTask,"窗口3").start();
}
}

View File

@@ -0,0 +1,24 @@
package com.inmind.thread_safe04;
public class TicketTask implements Runnable{
//定义100张票电影票
int tickeCount = 100;
@Override
public void run() {
//有票就卖
while (true) {
if (tickeCount > 0) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在卖第" + tickeCount + "张电影票");
tickeCount--;
} else {
break;
}
}
}
}