Semaphore实现线程同步
以下是您提供的 14 个 Java 并发程序示例的简要执行说明和核心要点。1. Semaphore信号量示例 (Listing 1)功能演示使用Semaphore控制对共享资源Shared.count的访问确保同一时间只有一个线程IncThread或DecThread能修改它。执行运行SemDemo类的main方法。两个线程将交替获取许可、修改count并释放许可输出结果将显示count从 0 递增到 5再递减回 0 的序列不会出现交错 。2. 生产者-消费者模型 (Listing 2)功能使用两个Semaphore(semProd和semCon) 实现经典的生产者-消费者同步确保生产者在消费者取走数据前不会覆盖数据消费者在没有新数据时等待 。执行运行ProdCon类的main方法。输出将交替显示Put和Got消息顺序为Put: 0,Got: 0,Put: 1,Got: 1... 直至 19。3. CountDownLatch 示例 (Listing 3)功能演示CountDownLatch用于让一个或多个线程等待其他线程完成操作。主线程调用await()等待工作线程 (MyThread) 每完成一次任务调用countDown()当计数器减至 0 时主线程继续执行 。执行运行CDLDemo类的main方法。输出顺序为Starting然后打印 0 到 4最后打印Done。4. CyclicBarrier 示例 (Listing 4)功能演示CyclicBarrier让一组线程相互等待到达屏障点后一起继续执行并可选择执行一个屏障动作 (BarAction) 。执行运行BarDemo类的main方法。三个线程 (A,B,C) 打印各自名称后在await()处等待当所有三个线程都到达后执行BarAction打印Barrier Reached!然后所有线程继续。5. Exchanger 示例 (Listing 5)功能演示Exchanger用于两个线程间交换数据。MakeString线程构建字符串UseString线程消费字符串两者通过exchange()方法同步交换数据 。执行运行ExgrDemo类的main方法。MakeString生成字符串如ABCDE与UseString交换UseString打印Got: ABCDE此过程重复三次。6. Phaser 基础示例 (Listing 6)功能演示Phaser作为更灵活的同步屏障支持动态注册/注销参与线程及分阶段 (Phase) 同步。主线程和工作线程 (A,B,C) 协同推进多个阶段 。执行运行PhaserDemo类的main方法。输出将显示每个线程依次开始三个阶段主线程在每个阶段完成后打印Phase X Complete最后打印The Phaser is terminated。7. 自定义 Phaser 示例 (Listing 7)功能通过继承Phaser并重写onAdvance()方法控制固定阶段数本例为 4 个阶段的执行。当所有阶段完成或注册方为 0 时Phaser 终止 。执行运行PhaserDemo2类的main方法。每个工作线程会循环执行阶段直到 Phaser 终止输出显示每个阶段的开始和完成信息。8. Executor 框架示例 (Listing 8)功能演示使用ExecutorService(newFixedThreadPool(2)) 管理线程池执行任务。结合CountDownLatch等待所有任务完成 。执行运行SimpExec类的main方法。四个任务 (A,B,C,D) 被提交到只有两个线程的池中执行每个任务打印 0 到 4。主线程等待所有任务完成后打印Done。9. Callable 与 Future 示例 (Listing 9)功能演示使用Callable接口替代Runnable提交可返回结果的任务并通过Future对象获取结果。展示了线程池执行计算任务并汇总结果 。执行运行CallableDemo类的main方法。三个Callable任务计算和、斜边、阶乘被提交执行主线程通过Future.get()获取并打印结果55, 5.0, 120。10. ReentrantLock 示例 (Listing 10)功能演示使用ReentrantLock实现显式锁来同步对共享资源 (Shared.count) 的访问提供了比synchronized更灵活的锁操作如可中断、超时、公平性等。执行运行LockDemo类的main方法。两个线程 (A,B) 将竞争锁获得锁的线程增加Shared.count并睡眠 1 秒然后释放锁。输出显示锁的获取和释放过程。11. Atomic原子变量示例 (Listing 11)功能演示使用AtomicInteger实现无锁的线程安全计数器。getAndSet()操作是原子的无需外部同步 。执行运行AtomicDemo类的main方法。三个线程 (A,B,C) 并发调用Shared.ai.getAndSet(i)由于是原子操作不会出现数据竞争但输出顺序不确定。12. Fork/Join 框架 (RecursiveAction) 示例 (Listing 12)功能演示使用ForkJoinPool和RecursiveAction并行处理数组计算平方根。任务在数据量超过阈值 (seqThreshold) 时递归分解利用工作窃取算法提高性能 。执行运行ForkJoinDemo类的main方法。程序将 0 到 99999 的数组元素并行转换为平方根并打印前 10 个元素的原始值和转换后的值。13. Fork/Join 参数化实验示例 (Listing 13)功能扩展 Listing 12允许通过命令行参数设置并行级别 (parallelism) 和顺序处理阈值 (threshold)用于实验和性能调优 。执行需带两个命令行参数运行例如java FJExperiment 2 1000。程序将根据参数并行处理数组偶数索引平方根奇数索引立方根并输出执行时间。14. Fork/Join框架 (RecursiveTask) 示例 (Listing 14)功能演示使用RecursiveTaskDouble执行有返回值的并行计算数组求和。任务递归分解子任务结果通过fork()/join()合并 。执行运行RecurTaskDemo类的main方法。程序并行计算一个包含正负交替值的数组的总和并打印结果Summation 0.0因为正负抵消。参考来源Java 多线程同步机制探秘Java多线程与同步机制深入理解Java多线程同步机制Java 多线程同步机制Java多线程的同步机制

相关新闻

软件开发中的上下文湮灭:从代码考古到主动防腐的工程实践

软件开发中的上下文湮灭:从代码考古到主动防腐的工程实践

那天下午,我盯着屏幕上那个运行了三天三夜的脚本,它终于吐出了最后一行日志。脚本的任务很简单:遍历一个旧项目的代码仓库,找出所有被标记为“待重构”的注释块,然后生成一份报告。报告生成了,密密麻麻列出…

2026/10/18 3:03:53 阅读更多 →
Clawdbot本地化AI助手部署与配置指南

Clawdbot本地化AI助手部署与配置指南

1. Clawdbot项目概述Clawdbot是一款基于Openclaw框架开发的AI助手工具,主要用于自动化任务处理和智能交互。作为一款新兴的AI工具,它支持本地化部署和云端运行两种模式,能够根据用户需求进行灵活配置。从技术架构来看,Clawdbot采用…

2026/10/18 3:03:58 阅读更多 →
Java Stream核心操作精讲

Java Stream核心操作精讲

以下是您提供的 10 个 Java Stream API 程序示例的执行说明和核心要点。 1. 基础 Stream 操作示例 (Listing 1) 功能:演示 Stream 的基础操作,包括获取流、使用 min()/max() 查找极值、sorted() 排序、filter() 过滤以及 forEach() 终端操作 。执行&am…

2026/10/17 22:18:01 阅读更多 →

最新新闻

人形机器人产业链白皮书:制造业先行,算法决胜

人形机器人产业链白皮书:制造业先行,算法决胜

简介:2024人形机器人产业链白皮书是一份面向机器人领域研究者、产品经理、投资机构从业者的行业深度资料,内容系统覆盖宏观环境分析、产业链拆解、主流生产企业扫描、技术路线对比与市场投资建议等模块,能够帮助读者快速建立对人形机器人产业…

2026/10/19 2:23:38 阅读更多 →
AI漫剧零基础制作全流程:从剧本到成片的生产链路拆解

AI漫剧零基础制作全流程:从剧本到成片的生产链路拆解

这次我们来看一个非常具体的方向:AI 漫剧的完整生产链路。如果你经常刷短视频平台,应该已经看到过一批 AI 漫剧账号。它们的形态很统一:“动态漫画画面 角色配音 剧情文案”,画面用 Stable Diffusion 系列模型生成二次元风格图像…

2026/10/19 2:23:38 阅读更多 →
跑山零接管不等于自动驾驶:智驾山路场景的技术真相与边界

跑山零接管不等于自动驾驶:智驾山路场景的技术真相与边界

前阵子围绕智能驾驶有一个很有意思的争论:一边是“自动驾驶都是忽悠”的质疑,另一边是各种智驾跑山、城市领航的视频刷屏。小鹏 MONA M03 相关话题里,“跑山零接管登顶”成了一个关键词。单看标题,这像是营销事件;但如…

2026/10/19 2:23:38 阅读更多 →
6.Excel项目排期表

6.Excel项目排期表

文章目录案例讲解案例讲解 项目时长 比较简单&#xff0c;直接两个单元格相减 用结束时间-开始时间 距离结束还剩几天 IF(D22<TODAY(),0,IF(D22TODAY(),“仅剩今天”,D22-TODAY())) 解释&#xff1a;这里采用if去判断还剩几天&#xff0c;如果结束时间<今天&#xff…

2026/10/19 2:23:38 阅读更多 →
基于Dubins路径与候选集的无人机集群协同攻击仿真实现

基于Dubins路径与候选集的无人机集群协同攻击仿真实现

做无人机集群协同的仿真&#xff0c;难点从来不在单机控制&#xff0c;而在多机之间的“协作逻辑”。目标搜索、冲突避免、联盟组建、任务执行&#xff0c;这四个环节单拎出来任何一个&#xff0c;写个Demo都不难&#xff0c;但把它们串成一个闭环&#xff0c;再加进资源分配的…

2026/10/19 2:23:38 阅读更多 →
AI漫剧全流程制作:从剧本到成片的零基础技术路径

AI漫剧全流程制作:从剧本到成片的零基础技术路径

B站有一套 AI 漫剧教程&#xff0c;标题很夸张&#xff1a;全 666 集&#xff0c;198 小时&#xff0c;零基础入门&#xff0c;还允许白嫖。很多人第一反应是标题党&#xff0c;但仔细看它列出的内容板块——剧本、分镜、静帧、视频、配音、剪辑、保持人物一致——这正是目前 A…

2026/10/19 2:22:37 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →