news 2026/4/16 14:13:27

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/4/15 17:52:49

Docker build参数优化Miniconda镜像构建速度

Docker构建优化:加速Miniconda镜像的实战策略 在AI开发日益工程化的今天,一个常见的痛点浮出水面:明明只是改了一行代码,CI/CD流水线却要花上七八分钟重建整个Python环境。尤其当项目依赖PyTorch、TensorFlow这类“重量级”框架时…

作者头像 李华
网站建设 2026/4/15 8:40:29

Docker top查看Miniconda容器运行进程状态

Docker top 查看 Miniconda 容器运行进程状态 在现代 AI 与数据科学开发中,我们常常面临这样一个尴尬局面:本地环境一切正常,但换一台机器就“依赖报错、版本冲突、路径找不到”。更糟的是,当把这些环境打包进容器后,…

作者头像 李华
网站建设 2026/4/16 13:03:15

高效配置PyTorch环境:Miniconda与Anaconda的对比及最佳实践

高效配置PyTorch环境:Miniconda与Anaconda的对比及最佳实践 在深度学习项目开发中,一个常见的困扰是:“为什么代码在我机器上跑得好好的,换到服务器就报错?”——问题往往不在于模型本身,而在于运行环境的差…

作者头像 李华
网站建设 2026/4/16 9:19:52

_springboot基于java的在线问卷调查系统(11622)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/16 5:44:45

springboot校园失物招领系统(11624)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/16 11:05:56

Jupyter密码设置:保护你的Miniconda Web服务安全

Jupyter密码设置:保护你的Miniconda Web服务安全 在远程开发日益普及的今天,越来越多的数据科学家和AI工程师选择将Jupyter Notebook部署在云服务器或容器中,通过浏览器实现跨设备、高效率的交互式编程。这种模式极大提升了协作灵活性&#x…

作者头像 李华