
从 Java 锁到分布式锁
围绕锁标志、持有者、重入、等待和释放,对比 synchronized、ReentrantLock、Redisson 与 Curator 的实现。
17 篇相关内容

围绕锁标志、持有者、重入、等待和释放,对比 synchronized、ReentrantLock、Redisson 与 Curator 的实现。

Curator 同样支持分布式读写锁 和联锁,只需要使用 InterProcessReadWriteLock 即可,来一起看看它的源码以及实现方式。

分布式信号量,之前在 Redisson 中也介绍过,Redisson 的信号量是将计数维护在 Redis 中的,那现在来看一下 Curator 是如何基于 ZooKeeper 实现信号量的。

在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的?

加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢?

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

Redisson 还支持可重入读写锁,允许在分布式场景下,同时有多个读锁和一个写锁处于加锁状态。

Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch。

RedLock 红锁,是分布式锁中必须要了解的一个概念。 但是不建议使用 Redisson 实现的 Redis 的红锁。

基于 Redis 的 Redisson 分布式联锁 RedissonMultiLock 对象可以将多个 RLock 对象关联为一个联锁,每个 RLock 对象实例可以来自于不同的 Redisson 实例。

公平锁的释放同样分为主动释放和超时释放。

加锁失败被放到等待队列之后,线程是如何处理的?

分布式公平锁是如何实现的?

前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。当锁加锁成功之后,锁是如何释放的?

看过可重入锁的 Lua 脚本,已经可以知道当锁存在时,是会加锁失败的。下面看一下,加锁失败之后是如何处理的呢?

说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制。本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的?

单系统很容易想到 Java 的各种锁,像 synchronize、ReentrantLock 等等等,那分布式系统如何处理?