当前位置:   article > 正文

ZK(ZooKeeper)分布式锁实现,史上超级详细_zk 实现分布式锁 -baijiahao

zk 实现分布式锁 -baijiahao

在这里插入图片描述

当然除了 clientA、clientB还有C\D\E等,这字母看着好奇怪又好熟悉,原理都是一样的,都是最小节点进行解锁,如果不是,监听前一个节点是否释放,如果释放了,再次尝试加锁。如果前一节节点释放了,自己就是最小了,就排到前面去了,有点类似于 银行取号 的操作。

代码实现


使用ZooKeeper 创建临时顺序节点来实现分布式锁,大体的流程就是 先创建一个持久父节点,在当前节点下,创建临时顺序节点,找出最小的序列号,获取分布式锁,程序业务完成之后释放锁,通知下一个节点进行操作,使用的是watch来监控节点的变化,然后依次下一个最小序列节点进行操作。

首先我们需要创建一个持久父类节点:我这里是 /mxn

在这里插入图片描述

WatchCallBack

import org.apache.zookeeper.*;

import org.apache.zookeeper.data.Stat;

import java.util.Collections;

import java.util.List;

import java.util.concurrent.CountDownLatch;

/**

  • @program: mxnzookeeper

  • @ClassName WatchCallBack

  • @description:

  • @author: 微信搜索:牧小农

  • @create: 2021-10-23 10:48

  • @Version 1.0

**/

public class WatchCallBack implements Watcher, AsyncCallback.StringCallback ,AsyncCallback.Children2Callback ,AsyncCallback.StatCallback {

ZooKeeper zk ;

String threadName;

CountDownLatch cc = new CountDownLatch(1);

String pathName;

public String getPathName() {

return pathName;

}

public void setPathName(String pathName) {

this.pathName = pathName;

}

public String getThreadName() {

return threadName;

}

pu

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/997546
推荐阅读
相关标签
  

闽ICP备14008679号