1. 初始化 init()
使用命名空間,創建zk鎖的總節點(永久節點),并添件事件監聽。
2. 獲取鎖 getLock()
死循環,當請求獲得鎖成功(創建臨時節點)后,退出循環。
創建失敗,重新設置同步資源值,阻塞線程
3. 釋放鎖 releaseLock()
檢查當前節點,并刪除。
4. 為總節點添加事件監聽addWatcherToLock(String path)
如果監聽到子節點的事件是刪除,并且是預期路徑,zkLatch.countDown();
還未考慮到鎖粒度的優化。。。
1. 初始化 init()
使用命名空間,創建zk鎖的總節點(永久節點),并添件事件監聽。
2. 獲取鎖 getLock()
死循環,當請求獲得鎖成功(創建臨時節點)后,退出循環。
創建失敗,重新設置同步資源值,阻塞線程
3. 釋放鎖 releaseLock()
檢查當前節點,并刪除。
4. 為總節點添加事件監聽addWatcherToLock(String path)
如果監聽到子節點的事件是刪除,并且是預期路徑,zkLatch.countDown();
還未考慮到鎖粒度的優化。。。