首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >redisson锁 tryLock的使用及正确用法

redisson锁 tryLock的使用及正确用法

作者头像
全栈程序员站长
发布2022-09-28 10:57:44
发布2022-09-28 10:57:44
7.3K1
举报

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
复制
方式一
RLock lock = redissonClient.getLock("Export:create:" + Context.get().getCorpId());
try {
    if (lock.tryLock(5, 10, TimeUnit.SECONDS)) {
        //业务处理
    } else {
        Assert.isTrue(false, "排队中,请稍后重试!");
    }
} catch (InterruptedException e) {
    Assert.isTrue(false, "请勿重复操作!");
} finally {
    if (lock.isLocked()) {
        lock.unlock();
    }
}

方式二: RLock lock = redisson.getLock(String.format(REWARD_CARD_LOCK_KEY, 2));

try {

//尝试加锁,最多等待10秒,上锁以后10秒自动解锁

if (lock.tryLock(10,10, TimeUnit.SECONDS)) {

try {

//处理

logger.info(“tryLock thread—{}, lock:{}”, Thread.currentThread().getId(), lock);

} catch (Exception e) {

} finally {

//解锁

lock.unlock();

}

}

} catch (InterruptedException e) {

//处理

//保留中断发生的证据,以便调用栈中更高层的代码能知道中断,并对中断作出响应 Thread.currentThread().interrupt();

}

public void testReentrantLock(RedissonClient redisson){ RLock lock = redisson.getLock(“anyLock”); try{ // 1. 最常见的使用方法 //lock.lock(); // 2. 支持过期解锁功能,10秒钟以后自动解锁, 无需调用unlock方法手动解锁 //lock.lock(10, TimeUnit.SECONDS); // 3. 尝试加锁,最多等待3秒,上锁以后10秒自动解锁 boolean res = lock.tryLock(3, 10, TimeUnit.SECONDS); if(res){ //成功 // do your business } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183889.html原文链接:https://javaforall.cn

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

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

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

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

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