public class ZookeeperDistrbuteLock extends ZookeeperAbstractLock {// zk连接地址private static final String CONNECTSTRING = "127.0.0.1:2181";// 创建zk连接private ZkClient zkClient = new ZkClient(CONNECTSTRING);private static final String PATH = "/lock";private CountDownLatch countDownLatch= null;private String beforePath;//当前请求的节点前一个节点private String currentPath;//当前请求的节点public ZookeeperDistrbuteLock() {if (!this.zkClient.exists(PATH)) {this.zkClient.createPersistent(PATH);}}@Overridepublic boolean  tryLock() {//如果currentPath为空则为第一次尝试加锁,第一次加锁赋值currentPathif(currentPath == null || currentPath.length()<= 0){//创建一个临时顺序节点currentPath = this.zkClient.createEphemeralSequential(PATH + '/',"lock");}//获取所有临时节点并排序,临时节点名称为自增长的字符串如:0000000400List<String> childrens = this.zkClient.getChildren(PATH);Collections.sort(childrens);if (currentPath.equals(PATH + '/'+childrens.get(0))) {//如果当前节点在所有节点中排名第一则获取锁成功return true;} else {//如果当前节点在所有节点中排名中不是排名第一,则获取前面的节点名称,并赋值给beforePathint wz = Collections.binarySearch(childrens,currentPath.substring(7));beforePath = PATH + '/'+childrens.get(wz-1);}return false;}@Overridepublic void waitLock() {IZkDataListener listener = new IZkDataListener() {public void handleDataDeleted(String dataPath) throws Exception {if(countDownLatch!=null){countDownLatch.countDown();}}public void handleDataChange(String dataPath, Object data) throws Exception {}};//给排在前面的的节点增加数据删除的watcher,本质是启动另外一个线程去监听前置节点this.zkClient.subscribeDataChanges(beforePath, listener);if(this.zkClient.exists(beforePath)){countDownLatch=new CountDownLatch(1);try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}this.zkClient.unsubscribeDataChanges(beforePath, listener);}public void unLock() {//删除当前临时节点zkClient.delete(currentPath);zkClient.close();}
}

分布式锁-zoomkeeper锁【享学课堂】相关推荐

  1. 2022还在为怎样去提升自己Android技术而发愁吗?享学课堂是个不错的选择

    前言 当你遇到难题,你会怎么去解决它?上网搜还是请教朋友来解答,如果没法得到合理的解决方法,那是不是就会放弃了.同样如此,想要提升自己Android的技术,有人会说可以自学,那只是对于某些人来说的,自 ...

  2. python课堂实例_享学课堂带你了解并读懂Python列表中的6种操作实例

    原标题:享学课堂带你了解并读懂Python列表中的6种操作实例 今天为大家来介绍一下很多人在享学课堂上学习Python时,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector ...

  3. 中高端Android开发人才进,享学课堂忠实陪伴,让学习成为一种享受

    今天为大家推荐的是享学课堂最新出品的Android安卓移动互联网架构开发课程,包含音视频.Kotlin.Jetpack.Flutter等技术讲解与源码解析,在理论讲解的过程中穿插实战项目,每个知识点都 ...

  4. python内建函数有哪些_享学课堂浅谈Python序列内建函数都有哪些

    python的内建函数和库函数的区别是什么?人在得不到的时候,什么都可以不介意.得到之后,什么都有点介意. python.什么是内建函数? python.什么是内建函数?新手小白自学python.不懂 ...

  5. 全心全意的服务,让转行的我能够成功斩获自己心仪的offer——享学课堂

    我是一名享学课堂的一员,我在这里告诉你关于涉足科技领域你需要知道的一切.在这里我将分享我如何参加享学课堂并在 3 个月内成功成为Android开发工程师的秘密. 作为最近放弃职业成为一名Android ...

  6. 2021-07-16(Kotlin学习笔记 -->享学课堂vip课程)

    Kotlin 学习笔记 购买了享学课堂的androidVip课程,工作一直很忙没有时间学习,最近抽时间学习一下,做一下学习笔记 fun main() {/* 定义没问题,调用不行 */var meth ...

  7. 【享学课堂学习python的感受】

    本人今年38岁了,目前在一家500强私企工作,事业逐渐稳定,业余时间总想学点什么才不至于让时间浪费掉,为自己做个技能储备,说不定还能赚点外快,何乐而不为.有一次无意中看到了享学课堂的python开发学 ...

  8. 享学课堂python基础学习day15之文件操作

    我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,废话不多说,文件操作里 ...

  9. 享学课堂python基础学习day16之类和对象

    我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,今天分享类和对象学习了 ...

  10. MyCat做MySQL负载均衡(享学课堂,咕泡学院听课笔记)

    不要用战术上的勤奋,掩盖战略上的懒惰. 一.数据库集群演示 演示的数据库的表分了三种, 1.配置表,存储一些配置文件,其他业务表需要关联读取,每个数据库都存储配置表的全部内容,即操作Mycat,所有集 ...

最新文章

  1. Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取
  2. 在 VMware ESXi 5.0 上安装万兆网卡驱动
  3. 如何开发属于自己的第一个Java程序
  4. AI智商评测标准专家研讨会邀请,2018年12月20日北京
  5. Perl中的单行凝视和多行凝视
  6. Linux(Ubuntu14.04)下安装Anaconda和Spyder
  7. [Delphi]根据输入日期按年月周日输出日期段
  8. SQL数据库的导入和导出
  9. XZ_iOS iOS13浅色模式/暗黑模式导航栏颜色不自动适配
  10. 电脑故障,usb驱动安装失败如何修复解决方案-驱动人生
  11. intel wifi 5100agn linux驱动,intel5100agn驱动
  12. 深度学习笔记----拓扑结构动态变化网络(Dropout,Drop Connect, Stochastic Depth, BranchyNet,Blockdrop,SkipNet)
  13. matlab 齐次线性方程组,利用matlab求解RE中出现的齐次线性方程组
  14. 第三方网站不能调用微信公众平台里的图片了 显示此图片来自微信公众号平台未经允许不可引用...
  15. 帮助海外游客规划从成田机场开始日本旅行的新网站上线
  16. 白盒/黑盒/灰盒测试的区别
  17. document的用法
  18. C/C++超市收银系统
  19. 【Machine Learning 学习笔记】Stochastic Dual Coordinate Ascent for SVM 代码实现
  20. shell函数(用法及定义)

热门文章

  1. Show Stopper!
  2. Json格式的数据集标签转化为有效的txt格式(data_coco)
  3. 10_Mysql查询
  4. 互动抽奖背后的随机性与算法实现
  5. js jq 图片上传功能
  6. 饱和气压与温度的关系_压力与饱和温度对照表
  7. C语言中的文件是流式文件吗,c语言文件流
  8. [入门篇]初识操作系统OS(这篇博客将帮你打开操作系统OS大门的第一步 超超超超超详细)
  9. 全程干货!拍乐云受邀LiveVideoStackCon,首席科学家分享拥塞控制最佳实践
  10. Caused by: java.io.EOFException: SSL peer shut down incorrectly