zookper的乐观锁
当zk出现多线程使用时,需要有乐观锁来保证线程的安全访问。zk的乐观锁是根据版本号实现的。所以在编码时需要根据版本号来更新数据。
@Test
public void testSetData() throws KeeperException, InterruptedException {
//这步时获取zk连接,不做描述
ZooKeeper zooKeeper = getZooKeeper();
Stat stat = new Stat();
byte[] data = zooKeeper.getData(node, false, stat);
//获取zk连接的版本号。
int version = stat.getVersion();
//根据版本号跟新数据。创建时,版本号为0.每次新增会递增,当版本号不符时,更新会失败。
zooKeeper.setData(node, "XXXX".getBytes(), 0);
}