news 2026/2/19 13:31:36

java程序的并发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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();
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 9:11:00

Linux auditd监控Miniconda关键目录安全事件

Linux auditd监控Miniconda关键目录安全事件 在高校实验室、企业AI研发平台或云原生推理服务中,一个看似不起眼的误操作——比如某位开发者不小心执行了 rm -rf 删除了一个共享的Conda环境——就可能导致整个团队数天的工作成果付诸东流。更危险的是,如果…

作者头像 李华
网站建设 2026/2/7 6:58:30

Miniconda环境健康检查:自动化脚本验证可用性

Miniconda环境健康检查:自动化脚本验证可用性 在AI开发与数据科学项目中,团队常面临一个看似简单却极具破坏力的问题:“为什么代码在我机器上能跑,在你那边就报错?” 这个问题的背后,往往是Python版本不一…

作者头像 李华
网站建设 2026/2/13 15:14:23

Jupyter魔法命令:%conda与%pip直接管理Miniconda环境

Jupyter魔法命令:%conda与%pip直接管理Miniconda环境 在数据科学和AI开发的日常实践中,你是否曾遇到这样的场景:满怀期待地运行一段代码,结果却弹出一个刺眼的 ModuleNotFoundError?或者好不容易配置好的环境&#xff…

作者头像 李华
网站建设 2026/2/5 15:03:43

手把手教你用SSH连接Miniconda-Python3.10容器进行远程模型训练

手把手教你用SSH连接Miniconda-Python3.10容器进行远程模型训练 在AI实验室的深夜,你正准备启动一个关键的模型训练任务。刚按下回车,本地笔记本风扇轰鸣,显存爆红——又失败了。这几乎是每个算法工程师都经历过的窘境:本地算力不…

作者头像 李华
网站建设 2026/2/10 6:28:42

conda install pytorch torchvision torchaudio -c pytorch 完整命令解析

conda install pytorch torchvision torchaudio -c pytorch 完整命令解析 在深度学习项目启动的那一刻,最令人头疼的问题往往不是模型设计或数据处理,而是环境配置——明明代码写好了,却因为 PyTorch 版本和 CUDA 不匹配导致 ImportError: li…

作者头像 李华
网站建设 2026/2/19 1:47:18

在云服务器部署Miniconda-Python3.10以支持大规模Token计算

在云服务器部署 Miniconda-Python3.10 以支持大规模 Token 计算 当你的大语言模型训练任务卡在“包版本不兼容”或“CUDA 找不到”的报错上时,你有没有想过,问题的根源可能不是代码,而是环境?在如今动辄处理数十亿 Token 的 AI 开…

作者头像 李华