上面的实现短时间内编写完,没有做详细的DEBUG,可能会有纰漏。某次执行结果如下:
线程threadB获取到资源resource:x的锁 线程threadB释放资源resource:x的锁 线程threadA获取到资源resource:x的锁 线程threadA释放资源resource:x的锁 小结Redisson中的red lock实现,应用到下面的核心技术:
合理应用Redis的基本数据类型HASH
Redis的订阅发布
Lua脚本的原子性
Netty中的Promise实现
Netty中的时间轮HashedWheelTimer和对应的定时任务(HashedWheel)Timeout
Semaphore进行带期限、永久或者可中断的阻塞以及唤醒,替代CountDownLatch中的无等待期限阻塞