基于zookeeper 临时顺序节点实现分布式锁(不可重入)
1 | package com.yahui.fan.zookeeper.distributedLock; |
测试
1 | package com.yahui.fan.zookeeper.distributedLock; |
##执行过程
Thread-8—-当前节点为空,创建节点:/root/0000000025
Thread-2—-当前节点为空,创建节点:/root/0000000027
Thread-14—-当前节点为空,创建节点:/root/0000000028
Thread-5—-当前节点为空,创建节点:/root/0000000029
Thread-11—-当前节点为空,创建节点:/root/0000000026
Thread-8—-获取锁:/root/0000000025
Thread-11—-/root/0000000026未获得锁
Thread-2—-/root/0000000027未获得锁
Thread-5—-/root/0000000029未获得锁
Thread-14—-/root/0000000028未获得锁
Thread-8—-订单号:201908021008410
Thread-8—-释放锁:/root/0000000025
Thread-11—-给前锁:/root/0000000025,增加监听。。。
Thread-14—-给前锁:/root/0000000027,增加监听。。。
Thread-5—-给前锁:/root/0000000028,增加监听。。。
Thread-2—-给前锁:/root/0000000026,增加监听。。。
Thread-5—-线程等待。。。
Thread-2—-线程等待。。。
Thread-14—-线程等待。。。
Thread-11—-释放前锁:/root/0000000025,监听。。。
Thread-11—-获取锁:/root/0000000026
Thread-11—-订单号:201908021008411
Thread-11—-释放锁:/root/0000000026
ZkClient-EventThread-15-127.0.0.1:2181—-前锁:/root/0000000026删除,触发计数器,启动等待线程。。。
ZkClient-EventThread-36-127.0.0.1:2181—-前锁:/root/0000000025删除,触发计数器,启动等待线程。。。
Thread-2—-释放前锁:/root/0000000026,监听。。。
Thread-2—-获取锁:/root/0000000027
Thread-2—-订单号:201908021008412
Thread-2—-释放锁:/root/0000000027
ZkClient-EventThread-43-127.0.0.1:2181—-前锁:/root/0000000027删除,触发计数器,启动等待线程。。。
Thread-14—-释放前锁:/root/0000000027,监听。。。
Thread-14—-获取锁:/root/0000000028
Thread-14—-订单号:201908021008413
Thread-14—-释放锁:/root/0000000028
ZkClient-EventThread-22-127.0.0.1:2181—-前锁:/root/0000000028删除,触发计数器,启动等待线程。。。
Thread-5—-释放前锁:/root/0000000028,监听。。。
Thread-5—-获取锁:/root/0000000029
Thread-5—-订单号:201908021008414
Thread-5—-释放锁:/root/0000000029