加锁过程不是原子的,不会死锁吗?

来源:9-7 ZooKeeper集群的概念、节点角色和原理解析

czlee2023

2022-06-04

在获取到所有子节点后,在判断是不是要监听,恰好要监听的节点这时删除了,不就死锁了?
写回答

1回答

大能老师

2022-06-09

我们经过确认,确实是会存在这样的情况,感谢同学及时提出问题。我们修改了设置监听的代码,在监听后的阻塞等待之前,先判断节点是否存在:

   if(zkClient.exists(previousPath.get())) {
      try {
          countDownLatch.await();
      } catch (InterruptedException e) {
          e.printStackTrace();
      }
    }

如果节点不存在则会放弃阻塞等待和节点的监听,转而进入下面lock()方法进行重新抢锁,具体代码已经更新到com.sample.mall.common.zk.ZkLockV2。这样就不会导致死锁了。



0
0

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

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

325 学习 · 74 问题

查看课程