当然除了 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
发表评论