您的当前位置:首页 > 热点 > ZooKeeper 分布式锁 Curator 源码之三:可重入锁并发加锁 正文
时间:2026-11-15 来源:网络整理 编辑:热点
快排霸屏软件【tg:seogoogle987】
前言
在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的?
1并发加锁
先来看结果,在多线程对 /loZocks/lock_01 加锁时,是在后面又创建了新的临时节点。
这块在加锁方法 CreateBuilderImpl#pathInForegoKround 中已经介绍过
这里判断 /locks/lock_01 路径已经存在,会直接创建新的临时顺序节点。
真正判断锁是否获取成功,其实是ee在 LockInternals#attemptLock 方法中的 internalLockLoop 方法中。
加锁结果及监听
internalLocpekLoop 方法的主要作用是判断加锁结果,以及获取锁失败时,对其他节点的监听。
获取父节点 /locks/lock_01 下的所有子节点,按照从小r 到大排序,判断自己是不是获取到锁,没有获取到就监听自己前一个节点; 支持设置超时时间,超时直接返回失败; 不支持设置超时时间或者还没有超时,则直分布接 wait 等待。
是否获取锁的代码在 StandardLockInternalsDriver#getsTheLock
这块就是判断是否为最小节点,式锁因为在 getSortedChildren 中已经对所有节点排序,所以方法中的 List children 是有序的。
maxLeases 是在 C InterProcessMutex 初始化的时候,指定的值为 1。
最终这里的结果是,判断自己是不是最小,不是最小,就将 pathToWatchur 设置为前一个节点。
只监听自己的前一个节点,可以避免羊群效应!
为什么要进行等待呢?
因为是为了防止无效自旋,因为这里有监听机制,会监听上at一个节点是否释放。
这块是 ZooKeeper 的 Watcher 监听机制,在节点释放的时候,会进行回调,然后使用 Java 的 notifyAll 方or法通知所有的 wait 线程。然后这里的 while trye 会继续执行,重新检查是否获得锁等。
2总结
本文主要介绍了基于 ZooKeeper 的 源分布式锁框架 Curator 在并发场景下的锁竞争问题。
重点需要了解的是:
为了避免羊群效应,临时顺序节点,加锁失败后监听的是前一个节点码之; 为了避免无效自旋,这里使用了 Java 的 wait/notifyAll 机制; 可以看出,默认加锁就是公平锁。
Facebook更新商业工具 WhatsApp将引入“商店”及个性化广告2026-08-28
Anthropic2028年营收或达700亿美元,现金流碾压OpenAI2026-11-03
应对万亿数据上亿并发!字节跳动的图数据库研发实践2026-06-22
Epic Games:为保应用商店利润 谷歌为手机和游戏开发商付费2026-08-18
Qwen 发布全新 AI 模型 Qwen3-Max:不仅能写代码,还能自主思考2026-08-06
云计算开发:Python练习实例-输出 9*9 乘法口诀表2026-06-04
OpenAI 发布 ChatGPT 自主“工作区代理”预览版2026-07-09
云计算核心技术Docker教程:Docker Swarm 复制和全局服务运行原理2026-06-05
亚马逊AWS将成立亚太地区部门,选址澳大利亚墨尔本2026-06-26
OpenAI 将 k8s 扩展至 7500 个节点以支持机器学习2026-10-28
标签: 清朗行动 AI应用乱象 中央网信办 生成式AI2026-08-05
标签: 欣旺达 极氪 理想汽车 电芯2026-06-22
硅谷大厂也看「名校学历」?Reddit小哥灵魂拷问引起热议2026-10-27
标签: 小度 超能小度 音色设置 百度2026-10-21
第四范式NeurIPS 2020:知识图谱嵌入的自动化2026-05-29
金山云Q1营收18.1亿元 其中公有云服务营收13.92亿元2026-07-11
微软将在PC及iOS端测试Xbox云游戏服务2026-10-11
谷歌出现全球大规模宕机 YouTube和Gmail等服务中断2026-07-16
标签: 抖音集团 2025反舞弊通报 电商 PICO2026-06-27