java程序的并发

一、项目说明(先看这个)

项目名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();
相关推荐
Wang's Blog22 分钟前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog24 分钟前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
Ivanqhz1 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
GPU实战笔记1 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
狗狗狗狗狗乐啊2 小时前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
qq_2518364572 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
caoerzhong2 小时前
JeeWMS 开源仓库管理系统全景解读:一套 Java WMS 如何把 WMS/OMS/BMS/TMS 装进同一个系统
java·开源
曹牧2 小时前
Java集合框架:List、ArrayList、Map 和 HashMap
java
白猫不黑2 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
顾城猿2 小时前
STOMP 协议
java