缓存:Redisson,闭锁测试
CountDownLatch,比如十个线程把任务全部做完了,才算全部完成,然后执行之后的。
@Autowired private RedissonClient redissonClient; /** * 闭锁 只有设定的人全通过才关门 */ @ResponseBody @GetMapping("/index/lockDoor") public String lockDoor() throws InterruptedException { RCountDownLatch door = redissonClient.getCountDownLatch("door"); // 设置这里有5个人 door.trySetCount(5); door.await();//等待闭锁都完成 return "5个人全部通过了..."; } @ResponseBody @GetMapping("/index/go/{id}") public String go(@PathVariable("id") Long id) throws InterruptedException { RCountDownLatch door = redissonClient.getCountDownLatch("door"); // 每访问一次相当于出去一个人 计数-1 door.countDown(); return id + "走了"; }
实际场景,我想到一个,和前些日子做的项目正好有关,就是下载文件,一个很大的文件多线程下载的话。分段来下载。然后等每一段都下载完成之后,就算是全部下载完成。
哦,对,抢红包,算了,比较牵强,抢红包等所有红包都被抢完了,就算是全部抢完了。说得通。