如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接 都在对同一个节点进行监听,当服务器检测到删除事件时,要通知所有的连接,所有的连接同时 收到事件,再次并发竞争,这就是羊群效应。
1、直接在/lock节点下创建一个临时有序节点
2、判断是不是/lock节点下最小的节点
是最小的,获得锁
不是最小的,对前面的节点进行监听watch
3、获得锁的请求,处理完释放锁,删除节点,然后后继第一个节点将收到通知,重复步骤2的判断
← zookeeper监听机制 Java整合Zookeeper实战→