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