缓存: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 + "走了";
    }

实际场景,我想到一个,和前些日子做的项目正好有关,就是下载文件,一个很大的文件多线程下载的话。分段来下载。然后等每一段都下载完成之后,就算是全部下载完成。

哦,对,抢红包,算了,比较牵强,抢红包等所有红包都被抢完了,就算是全部抢完了。说得通。