獲取鎖實現思路:node
首先建立一個做爲鎖目錄(znode),一般用它來描述鎖定的實體,稱爲:/lock_node
但願得到鎖的客戶端在鎖目錄下建立znode,做爲鎖/lock_node的子節點,而且節點類型爲有序臨時節點(EPHEMERAL_SEQUENTIAL); 例如:有兩個客戶端建立znode,分別爲/lock_node/lock-1和/lock_node/lock-2
當前客戶端調用getChildren(/lock_node)獲得鎖目錄全部子節點,不設置watch,接着獲取小於本身(步驟2建立)的兄弟節點
步驟3中獲取小於本身的節點不存在 && 最小節點與步驟2中建立的相同,說明當前客戶端順序號最小,得到鎖,結束。
客戶端監視(watch)相對本身次小的有序臨時節點狀態
若是監視的次小節點狀態發生變化,則跳轉到步驟3,繼續後續操做,直到退出鎖競爭。