【同步工具类】CountDownLatch闭锁任务同步
【同步工具类】CountDownLatch闭锁任务同步
转载:https://www.cnblogs.com/yangchongxing/p/9214284.html
打过dota的同学都知道,多人一起在线打游戏,每个人的电脑性能不同,所以加载游戏需要的时间也是不同的,只有等大家都加载完成了,游戏才能开始玩,我们就模拟这个过程。
游戏
package concurrent; import java.util.Random; import java.util.concurrent.CountDownLatch; public class DotaGame { public static void main(String[] args) throws InterruptedException { int N = 6; int load = 0; Random random = new Random(); // 计数器为1的闭锁,模拟点击开始游戏按钮 CountDownLatch startLatch = new CountDownLatch(1); // 计数器为N的闭锁,模拟打游戏的玩家 CountDownLatch endLatch = new CountDownLatch(N); for(int i = 1; i <= N; i++ ) { // 模拟电脑性能不同需要加载时间 load = random.nextInt(N); // 模拟玩家 new Thread(new Player("play" + i, load, startLatch, endLatch)).start(); } // 模拟开始游戏按钮 System.out.println("*** 3V3游戏开始 ***"); // 通知开始 startLatch.countDown(); // 等待所有玩家加载完成 endLatch.await(); // 游戏进行中 System.out.println("...Killing Monster..."); // 游戏结束 System.out.println("*** 3V3游戏结束 ***"); } }
玩家
package concurrent; import java.util.concurrent.CountDownLatch; public class Player implements Runnable { private String name = "";//玩家姓名 private int load;//加载时间 private CountDownLatch startLatch; private CountDownLatch endLatch; public Player(String name, int load, CountDownLatch startLatch, CountDownLatch endLatch) { this.name = name; this.load = load; this.startLatch = startLatch; this.endLatch = endLatch; } @Override public void run() { try { // 等待通知开始 startLatch.await(); // 加载游戏 Thread.sleep(load * 1000 * 5); // 等待其他玩家 System.out.println(name + ": 加载完成,等待其他玩家。"); // 通知加载完成 endLatch.countDown(); } catch (Exception e1) { e1.printStackTrace(); } } }
很好用的一个同步工具类
分类:
并发编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南