redisson 可重入锁
RLock lock = redissson.getLock("lock");
加锁
lock.lock;//阻塞式等待。默认加锁的时间都是30s时间。
1),锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s。不用担心过业务时间超长,锁自动过期被删掉。
2),加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,默认锁在30s以后自动删除。
lock.lock(10,TimeUnit.SECONDS);//10秒自动解锁,自动解锁时间一定要大于业务执行的时间
问题:lock.lock(10,TimeUnit.SECONDS);在锁时间到了以后,不会自动续期。
自动续期原理
1,如果我们传递了锁的超时时间,就会发送给redis执行脚本,进行占锁,超时时间就是我们指定的时间。
2,如果我们未指定锁的超时时间,就使用30*1000【lockWatchdogTimeout】看门狗的默认时间,只要占锁成功,就会启动一个定时任务【重新给锁设置过期时间,新的过期时间就是看门狗的默认时间】
解锁
lock.unlock();//释放锁