redisson锁tryLock的正确使用方式
作者:小蚂蚁hjk
这篇文章主要介绍了redisson锁tryLock的正确使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
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(); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。