代码中增长了具体注释,不做展开。看下zookeeper获取锁的具体实现:
- String attemptLock(long time, TimeUnit unit, byte[] lockNodeBytes) throws Exception
- {
- //参数初始化,此处省略
- //...
- //自旋获取锁
- while ( !isDone )
- {
- isDone = true;
- try
- {
- //在锁空间下创建临时且有序的子节点
- ourPath = driver.createsTheLock(client, path, localLockNodeBytes);
- //断定是否获得锁(子节点序号最小),获得锁则直接返回,不然壅塞等待前一个子节点删除通知
- hasTheLock = internalLockLoop(startMillis, millisToWait, ourPath);
- }
- catch ( KeeperException.NoNodeException e )
- {
- //对于NoNodeException,代码中确保了只有产生session过时才会在这里抛出NoNodeException,是以这里根据重试策略进行重试
推荐阅读
沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!“计算机法度榜样可以在给定某种类其余义务 T 和机能度量 P 下进修经验 E ,如不雅其在义务 T 中的机能正好可以用 P>>>详细阅读
本文标题:基于Zookeeper的分布式锁
地址:http://www.17bianji.com/lsqh/38128.html
1/2 1