一、项目说明(先看这个)
项目名: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();