甘孜州住房城乡建设局网站,个人网站设计方案,步骤1,怎么给做的网站做百度搜索RLock官网解释 基于Redis的Java分布式可重入锁对象#xff0c;实现了锁接口。 如果获得锁的Redisson实例崩溃#xff0c;那么这种锁可能永远挂起在获得状态。为了避免这种情况#xff0c;Redisson维护了锁看门狗#xff0c;它在锁持有者Redisson实例活着的时候延长锁过期时…RLock官网解释 基于Redis的Java分布式可重入锁对象实现了锁接口。 如果获得锁的Redisson实例崩溃那么这种锁可能永远挂起在获得状态。为了避免这种情况Redisson维护了锁看门狗它在锁持有者Redisson实例活着的时候延长锁过期时间。默认情况下看门狗的超时时间为30秒可以通过配置进行修改。lockWatchdogTimeout设置。 可以定义锁获取期间的leaseTime参数。在设定的时间间隔后锁自动释放。 RLock对象的行为符合Java Lock规范。这意味着只有锁所有者线程可以解锁它否则将抛出IllegalMonitorStateException。否则考虑使用RSemaphore对象。
总结下来就是
特性可重入锁看门狗默认时间30秒释放锁时要关注当前线程是否拥有锁
//获取锁对象
RLock lock redisson.getLock(myLock);//传统加锁方法
lock.lock();//或者获得锁并在10秒后自动解锁
lock.lock(10, TimeUnit.SECONDS);//加锁阻塞等待时间100秒且获得锁10秒后自动释放锁
boolean res lock.tryLock(100, 10, TimeUnit.SECONDS);
if (res) {try {...} finally {lock.unlock();}
}
自定义的锁方法
/*** 获取锁* param lockName* return*/public static RLock getLock(String lockName){RLock rLock redissonClient.getLock(lockName);if(rLock.isLocked()){return null;}rLock.lock(default_lease_time, TimeUnit.SECONDS);return rLock;}/*** 获取锁* param lockName* param waitTime 阻塞时间秒* return*/public static RLock getLock(String lockName, long waitTime){RLock rLock redissonClient.getLock(lockName);try {boolean resp rLock.tryLock(waitTime, default_lease_time,TimeUnit.SECONDS);if(resp){return rLock;}} catch (InterruptedException e) {e.printStackTrace();}return null;}/*** 释放锁* param lock*/public static void unlock(RLock lock){if(ObjectUtils.isEmpty(lock)){return;}if(!lock.isLocked()){return;}lock.unlock();}
除此官网还有其他几个所对想具体参考redisson