Zookeeper分布式锁实现Curator十一问(二)

pivoteic
发布于 2022-6-15 17:07
浏览
0收藏

 

attemptLock方法

Zookeeper分布式锁实现Curator十一问(二)-鸿蒙开发者社区

先通过driver的createsTheLock去创建节点。

Zookeeper分布式锁实现Curator十一问(二)-鸿蒙开发者社区

从这里看出,创建的节点类型是临时顺序节点,创建成功之后,就会返回当前创建的节点。

 

节点创建成功之后,会调用internalLockLoop方法来加锁。

Zookeeper分布式锁实现Curator十一问(二)-鸿蒙开发者社区

通过getSortedChildren方法获取排好序的子节点,然后获取当前的节点名称,再通过 driver.getsTheLock判断当前的节点有没有加锁成功,返回一个PredicateResults判断的结果,这里面存的就是否加锁成功的信息。

 

第一次加锁,那么到这里就加锁成功了。之后就会封装一个LockData对象,放入threadData 的map中。

 

加锁的流程如下图:

Zookeeper分布式锁实现Curator十一问(二)-鸿蒙开发者社区

四、如何实现可重入加锁

 

上文加锁的时候提到了,当第一次加锁成功之后,会往threadData放入该加锁的线程对应的LockData。

Zookeeper分布式锁实现Curator十一问(二)-鸿蒙开发者社区

文章转自公众号:三友的java日记

标签
已于2022-6-15 17:07:11修改
收藏
回复
举报
回复
    相关推荐