分布式锁
文章平均质量分 80
程序员小航
这个作者很懒,什么都没留下…
展开
-
ZooKeeper 分布式锁 Curator 源码 05:分布式读写锁和联锁
Curator 同样支持分布式读写锁 和联锁,只需要使用 InterProcessReadWriteLock 即可,来一起看看它的源码以及实现方式。原创 2021-12-13 17:42:53 · 1841 阅读 · 0 评论 -
ZooKeeper 分布式锁 Curator 源码 04:分布式信号量和互斥锁
前言分布式信号量,之前在 Redisson 中也介绍过,Redisson 的信号量是将计数维护在 Redis 中的,那现在来看一下 Curator 是如何基于 ZooKeeper 实现信号量的。使用 Demopublic class CuratorDemo { public static void main(String[] args) throws Exception { String connectString = "127.0.0.1:2181,127.0.0.1:2原创 2021-07-23 10:22:24 · 239 阅读 · 1 评论 -
ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁
前言在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的?并发加锁先来看结果,在多线程对 /locks/lock_01 加锁时,是在后面又创建了新的临时节点。这块在加锁方法 CreateBuilderImpl#pathInForeground 中已经介绍过这里判断 /locks/lock_01 路径已经存在,会直接创建新的临时顺序节点。真正判断锁是否获取成功,其实是在 LockInternals#attemptLock 方法中的 internalLockLo原创 2021-07-22 20:17:06 · 161 阅读 · 1 评论 -
ZooKeeper 分布式锁 Curator 源码 02:可重入锁重复加锁和锁释放
前言加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢?锁重入在上一小节中,可以看到加锁的过程,再回头看 internalLock 这个方法。加锁成功之后,将当前线程放到 threadData 中,threadData 是 ConcurrentMap<Thread, LockData> 类型的,不用担心并发问题。假如锁重入了,直接就会在上一部分 lockData != null 被拦下,然后执行 lockData.lockCount.incrementAndGet();。对原创 2021-07-21 16:11:01 · 280 阅读 · 0 评论 -
ZooKeeper 分布式锁 Curator 源码 01:可重入锁
前言一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。Curator 的锁也分为很多种,本文分析共享可重入锁。考虑到如果文章篇幅较长,不太适合阅读,所以对文章做了适当的拆分。环境配置本机三个节点版本:3.7.0系统:macOS安装方式:brew install zookeeperCurator Maven 依赖版本:5.1.0<原创 2021-07-16 10:19:31 · 359 阅读 · 2 评论