ZooKeeper 分布式锁 Curator 源码 01:可重入锁
前言
一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。

Curator 的锁也分为很多种,本文分析共享可重入锁。
考虑到如果文章篇幅较长,不太适合阅读,所以对文章做了适当的拆分。
环境配置

本机三个节点
版本:3.7.0系统:macOS安装方式:brew install zookeeperCurator Maven 依赖版本:5.1.0
org.apache.curator
curator-recipes
5.1.0
加锁示例

加锁前

在加锁之前,ZooKeeper 仅有一个节点 。
加锁中
在 路径上加锁。

加锁之后:
加锁源码
PS:下面代码截图中的代码风格就是 Curator 源码的代码风格。
入口

开始先从 threadData 中获取当前线程,这里肯定是没有的,所以进入 attemptLock 方法。
本方法中还包含了锁重入的逻辑,后面也会介绍。
加锁

核心部分就是这两行:
创建临时顺序节点

可以看出节点的 mode 是 ,表示这是一个临时顺序节点!
进入

就是本机 IP 地址。
这个 adjustPath 方法看名字就是在调整路径之类的。会生成一个 UUID 拼接到 中,变成 。
因为创建的是临时顺序节点,所以会自动在后面添加顺序,最终变为 。
具体创建节点是在 中。

总结
本篇文章主要介绍了基于 ZooKeeper 的分布式锁框架 Curator 的使用,以及加锁流程,源码分析。
下面对内容做下总结:

重点需要关注的是: