来,看段垃圾代码:
@Autowired
private RedissonClient redissonClient;
@Test
void test1(){
RLock name = redissonClient.getLock("name1");
try {
name.lock();
System.out.println("开始睡");
TimeUnit.SECONDS.sleep(2);
System.out.println("睡醒了");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (name.tryLock() ){
name.unlock();
}
}
}
问:现在锁释放了吗
可以试试,执行一次后,然后再执行一次,第二次会等待还久,这个等待的时间就是redisson的默认释放时间(看门狗机制,讲烂了,不多说了),这里看这没啥毛病,但是忽略了一个问题,这个锁一次就得解锁一次,不用但是节点崩掉,因为redisson做了这方面的考虑,所以可用的最简单用法如下:
@Autowired
private RedissonClient redissonClient;
@Test
void test1(){
RLock name = redissonClient.getLock("name1");
name.lock();
// 业务
name.unlock();
}