这段代码可能出问题

来源: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节点一定创建成功,客户端需要考虑失败的处理。

0
0

Java分布式架构设计与开发实战

项目贯穿式讲解,真正将理论与实战相结合

325 学习 · 74 问题

查看课程