news 2026/8/17 22:09:49

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/8/16 0:50:50

DeepSeek 赋能医疗信息化:基于电子病历的结构化诊疗建议模板生成

DeepSeek 赋能医疗信息化:基于电子病历的结构化诊疗建议模板生成 摘要 医疗信息化是提升医疗服务效率、质量和可及性的关键驱动力。电子病历 (Electronic Medical Record, EMR) 作为医疗信息化的核心载体,承载着海量的患者诊疗信息。然而,传…

作者头像 李华
网站建设 2026/8/7 1:53:03

在Miniconda中安装LightGBM进行高效梯度提升

在Miniconda中安装LightGBM进行高效梯度提升 在当今数据科学项目日益复杂的背景下,一个稳定、可复现且高效的开发环境已成为建模工作的基石。尤其是在处理大规模结构化数据时,模型训练的效率与依赖管理的清晰度直接决定了项目的推进速度。你是否曾遇到过…

作者头像 李华
网站建设 2026/8/8 3:03:43

Docker Run命令结合Miniconda镜像快速构建PyTorch训练环境

Docker 与 Miniconda 协同构建 PyTorch 训练环境 在深度学习项目中,最让人头疼的往往不是模型设计本身,而是“环境配置”这个看似简单却极易出错的环节。你是否经历过这样的场景:论文复现时因为 PyTorch 版本不匹配导致报错?团队协…

作者头像 李华
网站建设 2026/8/11 13:24:46

Docker diff查看Miniconda容器文件变更记录

Docker diff 查看 Miniconda 容器文件变更记录 在 AI 和数据科学项目中,环境“在我机器上能跑”依然是个老生常谈的问题。即便使用了 Conda 这样的环境管理工具,不同开发者的本地依赖、系统库、缓存路径仍可能导致行为差异。当团队协作或部署到生产环境时…

作者头像 李华
网站建设 2026/7/26 9:09:34

对抗样本攻击详解:如何让AI模型产生错误判断

精心构造的输入样本能让机器学习模型产生错误判断,这些样本与正常数据的差异微小到人眼无法察觉,却能让模型以极高置信度输出错误预测。这类特殊构造的输入在学术界被称为对抗样本(adversarial examples)。 模型将右侧图像判定为长臂猿,置信…

作者头像 李华
网站建设 2026/8/7 11:15:28

数据科学家必备:Miniconda-Python3.10镜像实现PyTorch环境精准复现

数据科学家必备:Miniconda-Python3.10镜像实现PyTorch环境精准复现 在深度学习项目中,你是否曾遇到过这样的场景?同事发来一份 Jupyter Notebook,声称“模型准确率高达95%”,可你在本地一跑,却报出一堆包版…

作者头像 李华