您的当前位置:首页 > 热点 > ZooKeeper 分布式锁 Curator 源码 之一:可重入锁 正文
时间:2026-11-12 来源:网络整理 编辑:热点
按摩激情
前言
一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。
Curator 的锁也分为很多种,本文分析共享可Zo重入锁。
考虑到如果文章篇幅较长,不太适合阅读,所以对文章做了适当的拆分。
1环境配置
本机三个节点
版本:3.7.0 系统:macOS 安装方式:brew install zookeeper Curator Maven 依赖版本:5.1.0
&oKnbsp; org.apache.curator curator-recipes 5.1.0 ee 2加锁示例
详细信息可参考官方文档[1]。
加锁前
在加锁之前,ZooKeeper 仅有一个节点 /zookeeper。
加锁中
在 /locks/lock_01 路径上加锁。
加锁之后:
创建了一个 /locks/lock_01 的持久节点,节点下有一个子节点 _c_cc4fc0pe45-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 节点 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 是临时节点r 节点 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 的数据是机器 IP 地址 3加锁源码
PS:下面代码截图中的代码风格就是 Curator 源码的代码风格。
入口
I分布nterProcessMutex#internalLock
开始先从 threadData 中获取当前线程,这里肯定是没有的,所以进入 attemptLock 方法。
本方法中还包含了锁重入的逻辑,后面也会介绍。
加锁
LockInternals#attemptL式锁ock
核心部分就是这两行:
createsTheLock 创建临时顺序节点 internalLockLoop 判断是否创建成功
创建临时顺序节点
StandardLockInternalsDriver#createsTheLock
可以看出节点的 mode 是 Cre CateMode.EPHEMERAL_SEQUENTIAL,表示这是一个临时顺序节点!
进入 CreateBuilderImpl#forPath(java.lang.String, byte[])
client.getDefaultData() 就是本机 IP 地址。
这ur个 adjustPath 方法看名字就是在调整路径之类的。会生成一个 UUID 拼接到 /locks/lock_01 中,变成 /locks/lock_01/_c_UUID-lock-。
因为创建的是临时顺序节点,所以会自动在后面添加顺序,最终变为 /locks/latock_01/_c_UUID-lock-0000000000。
具体创建节点是在 CreateBuilderImpl#pathInForeground 中。
创建临时节点,如果路径存在,会创建成功,如果路径不存在会创建失败;
创建失败后,先创建路径,再创建节点or。
4总结
本篇文章主要介绍了基于 ZooKeeper 的分布式锁框架 Curator 的使用,以及加锁流程,源码分析。
下面对内容做下总结:
重点需要关注的是:
基于 ZooKeeper 的分布式锁,是使用的临时顺序节点,父节点是持久节点; 创建临时节点时,父节点不 源存在,会先创建父节点(路径); 锁的组成结构为:对 /locks/lock_01 加锁,实际锁住的是 /locks/lock_01/_c_UUID-lock-序号,举例为 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8码 d3fb9a37c-lock-0000000000
引用链接:
[1]ZooKeeper Shared Reentrant Lock: https://curator.apache.org/curator-recipes/shared-reentrant-loc之一k.html
标签: 石头科技 RockMowZ1 智能割草机 品牌出海2026-08-28
标签: 华为 大疆 刘强东 追觅2026-06-21
标签: 纸尿裤 甲酰胺 碧芭宝贝 Babycare2026-07-11
OpenAI宣布12月起向成年用户开放成人内容:配套年龄验证机制同步上线2026-06-01
新体系架构下 阿里云“CIPU”加码下一个云计算时代2026-07-15
标签: 豆包 千问 文心一言 元宝2026-06-13
机器学习隐私研究新进展:数据增强风险被低估,新算法“降服”维数依赖2026-08-17
AI演示新纪元:Gamma 3.0重磅发布,用Agent和API颠覆创作流程2026-07-31
标签: Meta 扎克伯格 广告收入 AI基础设施2026-07-18
iPhone 12 mini面板订单不足 苹果或向三星支付巨额赔偿2026-07-23
/和/*的区别记不住?我的答案保你终身难忘2026-09-29
标签: 长飞先进 碳化硅 第三代半导体 车规芯片2026-07-30
标签: 卓世科技 璇玑玉衡 行业大模型 具身智能2026-10-05
标签: 标签 AI AI短剧2026-11-07
标签: 康佳集团 周彬 深康佳A 华润集团2026-10-13
OpenAI 收入预测剑指1000亿美元,欲创科技史上最快增长神话2026-08-28
割双眼皮什么梗2026-08-14
OpenAI GPT-5 被指数学成就夸大,引发科技界热议2026-08-24
这是极简单的人工神经网络解说2026-09-24
IBM将收购云计算软件公司Turbonomic 交易预计于今年Q2完成2026-09-12