一、项目说明(先看这个)
项目名 :MultiThreadDemo
功能:
-
模拟 两个窗口同时卖票
-
多个线程共享同一份数据
-
体现 Java 的 多线程并发机制
二、项目结构(逻辑层面)
MultiThreadDemo
├── Ticket.java // 共享资源
├── TicketWindow.java // 线程类
└── Main.java // 启动程序
三、代码实现
1️⃣ 共享资源类(Ticket.java)
public class Ticket {
private int count = 10;
// 同步方法,保证线程安全
public synchronized void sell() {
if (count > 0) {
System.out.println(
Thread.currentThread().getName() +
" 卖出一张票,剩余:" + (--count)
);
}
}
}
📌 关键点
-
synchronized→ 保证同一时间只有一个线程卖票 -
count是 多个线程共享的数据
2️⃣ 线程类(TicketWindow.java)
public class TicketWindow extends Thread {
private Ticket ticket;
public TicketWindow(Ticket ticket, String name) {
super(name);
this.ticket = ticket;
}
@Override
public void run() {
while (true) {
ticket.sell();
if (Thread.currentThread().isInterrupted()) {
break;
}
}
}
}
📌 关键点
-
继承
Thread -
多个线程共享同一个 Ticket 对象
3️⃣ 主程序入口(Main.java)
public class Main {
public static void main(String[] args) {
Ticket ticket = new Ticket();
TicketWindow w1 = new TicketWindow(ticket, "窗口一");
TicketWindow w2 = new TicketWindow(ticket, "窗口二");
w1.start();
w2.start();
}
}
📌 关键点
-
start()→ 启动线程(不是run()) -
两个线程 并发执行
四、运行效果(示例输出)
窗口一 卖出一张票,剩余:9
窗口二 卖出一张票,剩余:8
窗口一 卖出一张票,剩余:7
窗口二 卖出一张票,剩余:6
...
👉 顺序不固定 ,体现并发
👉 但票数不会出错(线程安全)
五、这个项目体现了哪些多线程知识点?
✅ Java 并行机制
✅ 多线程共享资源
✅ Thread
✅ synchronized 同步
✅ 线程安全问题
六、考试/面试一句话总结
Java 通过 多线程机制 实现程序的并发执行,
多个线程可同时运行并共享资源,需要同步机制保证安全。
其中的super(name)中,如果没加,就会没有名字。
如果类TicketWindow不想继承Thread,也可以这样写(对比)
Thread t = new Thread(() -> {
System.out.println(Thread.currentThread().getName());
}, "窗口一");
t.start();