前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redisson分布式锁之闭锁(CountDownLatch)

Redisson分布式锁之闭锁(CountDownLatch)

作者头像
周杰伦本人
发布2022-10-25 15:47:18
4890
发布2022-10-25 15:47:18
举报
文章被收录于专栏:同步文章

LockTestController 类:

代码语言:javascript
复制
package com.xiepanpan.locks.lockstest.controller;

import com.xiepanpan.locks.lockstest.service.RedissonLockService;
import org.redisson.api.RCountDownLatch;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: xiepanpan
 * @Date: 2020/2/24
 * @Description:  Redisson 锁测试
 */
@RestController
public class LockTestController {

    @Autowired
    RedissonLockService redissonLockService;

    /**
     * 拉闸停电
     * @return
     * @throws InterruptedException
     */
    @GetMapping("/switchOff")
    public String switchOff() throws InterruptedException {
        return redissonLockService.switchOff();
    }

    /**
     * 下班回家
     * @return
     */
    @GetMapping("/goHome")
    public String goHome() {
        return redissonLockService.goHome();
    }

}

RedissonLockService 类:

代码语言:javascript
复制
package com.xiepanpan.locks.lockstest.service;

import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RCountDownLatch;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author: xiepanpan
 * @Date: 2020/2/24
 * @Description: redisson 分布式锁
 */
@Service
@Slf4j
public class RedissonLockService {

    @Autowired
    RedissonClient redissonClient;

    public String switchOff() throws InterruptedException {
    	//这里缓存里设置的值是5 意思是还有5个人没走
        RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("num");
        //trySetCount意思是从缓存取的num是0或者没有这个key 创建key设置值是5
//        countDownLatch.trySetCount(5);
        log.info("我要拉闸了 下班了赶紧走 不要浪费公司的电");
        //大爷处于等待状态 看看谁还没走
        countDownLatch.await();
        log.info("拉闸断电!");
        return "拉闸断电!";
    }

    public String goHome() {
        RCountDownLatch countDownLatch = redissonClient.getCountDownLatch("num");
        countDownLatch.countDown();
        log.info("溜了溜了。。。");
        return "溜了溜了。。。";
    }
}

效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五个人没走完 switchOff请求会一直处于等待状态 五个人走完后才会返回结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档