如果达到了超时时间,但业务代码还没执行完,需要给锁自动续期。
我们可以使用TimerTask
类,来实现自动续期的功能:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run(Timeout timeout) throws Exception {
//自动续期逻辑
}
}, 10000, TimeUnit.MILLISECONDS);
获取锁之后,自动开启一个定时任务,每隔10秒钟,自动刷新一次过期时间。这种机制在redisson框架中,有个比较霸气的名字:watch dog
,即传说中的看门狗
。
(41条消息) Timer与TimerTask实现定时任务_silent girl的博客-CSDN博客_timertask定时任务
(41条消息) 聊聊redis分布式锁的8大坑_Java笔记虾的博客-CSDN博客
trycatch防止解锁失败但守护线程仍刷新过期时间。