获取锁实现思路: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,继续后续操做,直到退出锁竞争。