1.countdownlatch概念
他是啥,做啥用?
其实就相当于是个计数器,比如你某个线程运行前,必须有10个线程运行你才能运行,那么就可以用这玩意来保证,
实际上有啥场景呢,比如你电脑开机,bios检查内存显卡啥的正常,加载啥界面设置,加载操作系统等等线程都运行好了你才进入桌面
2.模拟场景
这里我们模拟一场跑步比赛,比赛共十个人,全部人都跑完或者时间超过十分钟比赛就结束
上代码
@RequestMapping({"/gameProcess"})
@ResponseBody
public String gameProcess(){
//模拟跑步比赛
System.out.println("发令枪------啪");
RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("countDownLatch");
countDownLatch.trySetCount(10);
try {
countDownLatch.await(10, TimeUnit.MINUTES);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "比赛结束";
}
@RequestMapping({"/finish/{id}"})
@ResponseBody
public String finish(@PathVariable String id){
RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("countDownLatch");
countDownLatch.countDown();
return id+"选手跑完了";
}
测试与分析:
(1).开始比赛 裁判发令后开始等待
(2)选手开跑到结束
。。。其它人陆续完成,直到最后一位同学
好的,1到10号都跑完了,看来我不用加班到十分钟了,裁判停止等待,宣告比赛结束