redisson鎖 tryLock的使用及正確用法


方式一
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://blog.csdn.net/l1028386804/article/details/73523810


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM