这段代码可能出问题
来源:9-6 ZooKeeper分布式锁解决惊群效应的代码实现

慕丝8512196
2024-02-17
在同时创建很多个线程,去new ZkLockV2的时候,可能会有些线程都执行到zkClient.createPersistent(lockPath),createPersistent会抛出node已创建的异常。
public ZkLockV2(String lockPath) {
zkClient = new ZkClient(zkServer);
zkClient.setZkSerializer(new ZkSerializer());
this.lockPath = lockPath;
if(!zkClient.exists(lockPath)) {
zkClient.createPersistent(lockPath);
}
}
写回答
1回答
-
大能老师
2024-04-06
这个没什么问题,zkClient.createPersistent(lockPath) 本来就可能会抛出运行时异常的。关键在于使用方,需要考虑调用ZkLockV2失败的时候的处理。
也即是ZkLockV2并不保证lockPath节点一定创建成功,客户端需要考虑失败的处理。
00
相似问题