以伪代码为例来看问题
案例1
案例2
案例3
其实我们可以定义一个定时任务去不断的刷新lock的过期时间,避免在代码执行过程中lock过期,定时任务可以每3秒监听一次lock是否存在,如果存在则把这个lock的过期时间刷新。
案例4
其实在redisson底层工作原理和案例3很像
redissonClient.getLock("lock").lock(10,TimeUnit.SECONDS);
相当于案例3中的设置lock的过期一样,内部也是维护了一个定时任务去更新lock的过期时间,更新频率是3分之一个过期时间。比如我过期时间设置的是9s,那么是每3s更新一次我们的过期时间。当一个线程已经持有锁其他线程想要获取时则是进入自旋状态等待。