分布式锁基础--简单案例分析

148 阅读1分钟

以伪代码为例来看问题

案例1 image.png

案例2 image.png

案例3

image.png 其实我们可以定义一个定时任务去不断的刷新lock的过期时间,避免在代码执行过程中lock过期,定时任务可以每3秒监听一次lock是否存在,如果存在则把这个lock的过期时间刷新。

案例4

image.png 其实在redisson底层工作原理和案例3很像

redissonClient.getLock("lock").lock(10,TimeUnit.SECONDS);

相当于案例3中的设置lock的过期一样,内部也是维护了一个定时任务去更新lock的过期时间,更新频率是3分之一个过期时间。比如我过期时间设置的是9s,那么是每3s更新一次我们的过期时间。当一个线程已经持有锁其他线程想要获取时则是进入自旋状态等待。