ZooKeeper连接并创建节点以及实现分布式锁操作节点排序输出最小节点Demo
2021-06-17 16:05
标签:完成 switch 存在 nod tar std distrib keep delete ZooKeeper连接并创建节点以及实现分布式锁操作节点排序输出最小节点Demo 标签:完成 switch 存在 nod tar std distrib keep delete 原文地址:https://www.cnblogs.com/feiyangbahu/p/9719998.htmlclass LockThread implements Runnable {
private DistributedLock lock;
public LockThread(int threadId,CountDownLatch latch) throws Exception {
this.lock = new DistributedLock(threadId,latch);
}
@Override
public void run() {
//每一个线程对象启动后都应该创建一个临时的节点信息
try {
this.lock.handle();//进行具体的操作处理
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class TestDistributedLock {
public static void main(String[] args) throws Exception {
CountDownLatch latch = new CountDownLatch(10);
for (int i = 0; i ) {
new Thread(new LockThread(i,latch)).start();;
}
//Thread.sleep(Long.MAX_VALUE);//为了保证可以观察到所有的临时节点信息,保证此处先不进行关闭
latch.await();
System.out.println("************* 所有的线程对象操作完毕 *************");
}
public class DistributedLock {//建立一个描述分布式锁的程序处理类
public static final String CONNECTION_RUL = "192.168.12.121:2181,192.168.12.122:2181";
public static final int SESSION_TIMEOUT = 2000;//设置连接超时时间
public static final String AUTH_INFO = "zkuser:mldnjava";//进行连接的授权信息
public static final String GROUPNODE = "/mldn-lock";//根节点
public static final String SUNBODE = GROUPNODE + "/lockthread-";//子节点
private CountDownLatch latch = null;
//本操作的主要目的是为了在取得zookeeper连接之后才能进行后续的处理
private CountDownLatch connectLatch = new CountDownLatch(1);
private ZooKeeper zkClient = null; //建立Zookeeper程序控制类
private String selfPath; //保存每次创建的临时节点信息
private String waitPath; //保存下一个要进行处理的节点
private int threadId = 0;
/** 进行一些初始化操作使用
*
* @param threadId 随意给定一个编号信息 * @param latch 进行线程同步处理
* @throws Exception */
public DistributedLock(int threadId, CountDownLatch latch) throws Exception {
this.threadId = threadId;//保存每一个线程对象自己的ID信息
this.latch = latch;
this.connectionZookeeper();//进行节点的连接
}
public void handle() throws Exception {//具体业务处理
this.createSubNode();//创建临时节点操作
}
public void handleSuccess() throws Exception {//表示取得锁之后进行的处理
if (this.zkClient.exists(this.selfPath, false) == null) {
return;//如果当前节点不存在
}
this.handleCallback();//执行具体的业务操作
//如果某一个节点操作完毕了,那么应该立即删除掉该节点,否则获得的最小节点永远都是该节点
this.zkClient.delete(selfPath, -1);
this.releaseZookeeper();//释放连接
this.latch.countDown();//进行减减的操作
}
public void handleCallback() throws Exception {//取得分布式锁之后的目的是要进行具体的操作
Thread.sleep(200);//实现一个延迟处理
System.out
.println("****** Thread-" + this.threadId + "获得操作权,进行具体的业务操作");
}
public boolean checkMinPath() throws Exception {//进行最小节点的判断
List
文章标题:ZooKeeper连接并创建节点以及实现分布式锁操作节点排序输出最小节点Demo
文章链接:http://soscw.com/essay/95116.html