【Reisson starter】 公平锁 Fair Lock
【Reisson starter】 公平锁 Fair Lock
Metadata
title: 【Reisson starter】 公平锁 Fair Lock
date: 2023-01-22 21:43
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/Redisson
categories:
- Redisson
keywords:
- Redisson
description: 【Reisson starter】 公平锁 Fair Lock 先获取锁的线程先拿到锁,后面的线程都在后面排着,它保证了当多个Redisson客户端线程同时请求加锁时,优先分配给先发出请求的线程。所有请求线程会在一个队列中排队,当某个线程出现宕机时,Redisson 会等待5秒后继续下一个线程,也就是说如果前面有5个线程都处于等待状态,那么后面的线程会等待至少25秒。
【Reisson starter】 公平锁 Fair Lock
先获取锁的线程先拿到锁,后面的线程都在后面排着,它保证了当多个Redisson客户端线程同时请求加锁时,优先分配给先发出请求的线程。所有请求线程会在一个队列中排队,当某个线程出现宕机时,Redisson 会等待5秒后继续下一个线程,也就是说如果前面有5个线程都处于等待状态,那么后面的线程会等待至少25秒。
/**
* 公平锁
* @param lockName
* @param waitTimeout
* @param timeout
* @param unit
* @return
*/
public boolean getFairLock(String lockName, long waitTimeout,long timeout, TimeUnit unit){
checkRedissonClient();
RLock lock = redissonClient.getFairLock(DEFAULT_LOCK_NAME + lockName);
try {
boolean res = lock.tryLock(waitTimeout,timeout,unit);
if (!res) {
log.debug(" get lock fail ,lockKey:{}", lockName);
return false;
}
log.debug(" get lock success ,lockKey:{}", lockName);
return true;
} catch (Exception e) {
log.error(" get lock fail,lockKey:{}, cause:{} ",
lockName, e.getMessage());
return false;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论