方式一 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