1.1基于Redis的分布式可重入锁定Java对象及其实现
java.util.concurrent.locks.Lock interface
RLocklock=redisson.getLock("anyLock");
lock.lock();
如果Redisson实例获得了锁崩溃,那么这种锁就可能永远挂在已获得的状态中。为了避免这个Redisson维护锁看门狗,它延长锁过期,而锁持有人Redisson实例是活着的。默认情况下,锁看门狗超时为30秒,可以通过Config.lockWatchdogTimeout设置进行更改。
lock.lock(10,TimeUnit.SECONDS);
//Wait for 100 seconds and automatically unlock it after 10 seconds
booleanres=lock.tryLock(100,10,TimeUnit.SECONDS);
if(res) {
try{...}
finally{
lock.unlock();
}
}
REDISSON还提供了用于锁定对象的异步方法:
RLocklock=redisson.getLock("anyLock");
lock.lockAsync();
lock.lockAsync(10,TimeUnit.SECONDS);
Futureres=lock.tryLockAsync(100,10,TimeUnit.SECONDS);
Rock对象按照java Lock规范运行。这意味着只有锁所有者线程才能解锁,否则将引发IllegalMonitorStateException。但是,如果您仍然需要这样的场景,请使用RSem标对象。