基于Redisson的Redisson分布式闭锁(CountDownLatch)Java对象RCountDownLatch采用了与java.util.concurrent.CountDownLatch相似的接口和用法。
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.trySetCount(1);
latch.await();
// 在其他线程或其他JVM里
RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch");
latch.countDown();
一:编写代码测试
代码示例如下:
/**
* 闭锁测试
*/
@GetMapping("/CountDownLatch")
@ResponseBody
public String CountDownLatch() throws InterruptedException {
RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("CountDownLatch-lock");
countDownLatch.trySetCount(5);
countDownLatch.await();//等待闭锁都完成
System.out.println("执行业务逻辑---》");
return "ok";
}
@GetMapping("/CountDown/{id}")
@ResponseBody
public String CountDown(@PathVariable("id") Long id){
RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("CountDownLatch-lock");
countDownLatch.countDown();//计数减一
System.out.println("执行业务逻辑----》");
return id+"";
}
启动服务,打开浏览器开始测试
总结:
CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。