zookeeper如何实现竞争锁
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章给大家分享的是有关zookeeper如何实现竞争锁的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。package com.hgs.sharelocks;import
千家信息网最后更新 2025年12月01日zookeeper如何实现竞争锁
这篇文章给大家分享的是有关zookeeper如何实现竞争锁的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
package com.hgs.sharelocks;import java.util.Collections;import java.util.List;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;public class ZKsharelocks {private ZooKeeper zk = null; private final static String connectString = "192.168.6.131:2181,192.168.6.132:2181,192.168.6.133:2181"; private final static int sessionTimeout = 2000; private final static String parentNode="/servers"; private final static String subNode="/sub"; private volatile String myPath = null; private boolean lockflag = false;public static void main(String[] args) throws Exception {ZKsharelocks sl = new ZKsharelocks();sl.getConnect();Thread.sleep(Long.MAX_VALUE);}public void getConnect() throws Exception{//创建实例zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {@Overridepublic void process(WatchedEvent event) {//判断事件的类型以及路径是否是业务路径if(event.getType()==EventType.NodeChildrenChanged&&event.getPath().equals(parentNode)) {List inchild = null; try { //得到子节点,继续监听 inchild = zk.getChildren(parentNode, true); //排序 Collections.sort(inchild); //判断返回的时间路径不是null并且最小的子路经是当天路径 if(myPath != null&&inchild.size()>0&&inchild.indexOf(myPath.substring(parentNode.length()+1))==0) { doSomthing(); Thread.sleep(2000); myPath=zk.create(parentNode+subNode, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); }} catch (Exception e) {e.printStackTrace();}}}});//首先创建一个临时的序列的条目myPath=zk.create(parentNode+subNode, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);//得到父节点下面的子目录数并进行监听List childs = zk.getChildren(parentNode, true);//判断进入到的时候是否只有自己,如果只有自己则可以做业务逻辑if(childs.size()==1) {//业务方法,在业务方法内有删除myPath条目的操作doSomthing();//删除完成后继续myPath=zk.create(parentNode+subNode, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);}}public void doSomthing() throws Exception {System.out.println("get the lock..."+Thread.currentThread().getName());//得到锁完成业务后,删除持有的锁,即删除该条目zk.delete(myPath, -1);}} 感谢各位的阅读!关于"zookeeper如何实现竞争锁"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
业务
路径
条目
竞争
内容
只有
方法
更多
篇文章
节点
监听
不错
实用
最小
事件
子目
子目录
实例
序列
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大学生对网络安全意识的调研
数据库安装 不重启电脑
购买清单软件开发
关于网络安全的手绘
网络安全实训项目分析报告
网络安全四原则
服务器一直显示缺口
小猿搜题里边包含网络安全题库
长沙学习软件开发公司有哪些
云数据库云技术
谈谈应用软件开发
怎么查看服务器的显存
数据库中为项目表添加列
银行储蓄管理系统数据库
电脑弹出服务器忙是怎么回事
象山标准刀片服务器专业服务
怀旧服服务器可以进多少人
软件开发经理工薪多少
django 服务器管理
新中工软件开发
数据库近2018年参考文献
数据库的集成
加油小礼盒软件开发
和龙软件开发哪家合适
山东飞鱼网络技术
中药化学数据库
计算机网络技术ppt模板
软件开发案件
医用软件与网络技术就业前景
软件开发进阶系列为什么要编码