基於Zookeeper實現的分布式互斥鎖 - InterProcessMutex
阿新 • • 發佈:2018-10-30
function 可重入 lse containe ntc map delet mode start
Curator
是ZooKeeper
的一個客戶端框架,其中封裝了分布式互斥鎖
的實現,最為常用的是InterProcessMutex
,本文將對其進行代碼剖析
簡介
InterProcessMutex
基於Zookeeper
實現了分布式的公平可重入互斥鎖
,類似於單個JVM進程內的ReentrantLock(fair=true)
構造函數
1
|
// 最常用
|
獲取鎖
InterProcessMutex.acquire
1
|
// 無限等待
|
InterProcessMutex.internalLock
1
|
private boolean internalLock(long time, TimeUnit unit) throws Exception{
|
1
|
// 映射表
|
1
|
// 鎖信息
|
LockInternals.attemptLock
1
|
// 嘗試獲取鎖,並返回鎖對應的Zookeeper臨時順序節點的路徑
|
1
|
// From StandardLockInternalsDriver
|
LockInternals.internalLockLoop
1
|
// 循環等待來激活分布式鎖,實現鎖的公平性
|
1
|
// From StandardLockInternalsDriver
|
1
|
// From LockInternals
|
1
|
// From LockInternals
|
釋放鎖
弄明白了獲取鎖的原理,釋放鎖的邏輯就很清晰了
InterProcessMutex.release
1
|
public void release() throws Exception{
|
LockInternals.releaseLock
1
|
void releaseLock(String lockPath) throws Exception{
|
1
|
// Class:LockInternals
|
總結
InterProcessMutex
的特性
- 分布式鎖(基於
Zookeeper
) - 互斥鎖
- 公平鎖(
監聽上一臨時順序節點
+wait() / notifyAll()
) - 可重入
基於Zookeeper實現的分布式互斥鎖 - InterProcessMutex