分布式锁Redisson之闭锁

简介

闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:

1)确保某个计算在其需要的所有资源都被初始化之后才继续执行;

2)确保某个服务在其他依赖的所有其他服务都已经启动之后才启动;

3)等待直到某个操作所有参与者都准备就绪在继续执行。

案例

来看看它的应用场景案例,现在有五个班,你要等所有的班都走完才能放假。

 /**
     * 放假、锁门
     * 1 班没人了
     * 5个班,全部走完,我们才可以锁大门
     * 分布式闭锁
     */
    @GetMapping("/lockDoor")
    @ResponseBody
    public String lockDoor() throws InterruptedException {

        RCountDownLatch door = redisson.getCountDownLatch("door");

        door.trySetCount(5);
        door.await();// 等待闭锁都完成

        return "放假了";
    }

    @GetMapping("/gogogo/{id}")
    @ResponseBody
    public String go(@PathVariable Long id){
        redisson.getCountDownLatch("door").countDown();//计数-1
        return id + "班的人都走了";
    }

这个await()方法就是等到闭锁变为0, 我们先对/lockDoor发起请求,发现它会一直加载,因为它在等待同一把闭锁变为0,所以,这里我们要对第二个接口访问5次,来让它变为0.
image

image

当访问五次后,/lockDoor就加载出来了

image

posted @ 2022-11-17 18:10  长情c  阅读(128)  评论(0)    收藏  举报