博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zookeeper | 分布式锁的实现
阅读量:4104 次
发布时间:2019-05-25

本文共 1727 字,大约阅读时间需要 5 分钟。

一、简介

ZK 实现分布式锁的原理是使用临时节点+事件通知的方式实现,实现思路如下:

1、多个客户端在 ZK 上创建临时节点。
2、因为临时节点的路径是唯一的,所以只能有一个创建成功,哪个客户端能创建成功就能获得锁。
3、当一个客户端创建节点后,其他客户端只能等待。
4、当一个客户端执行完逻辑后,删除节点。
5、其他客户端监听到节点被删除,则去争夺资源创建节点。

二、实现

这里基于 curator 框架简单实现

1、添加 maven 依赖
org.apache.curator
curator-framework
4.0.0
org.apache.curator
curator-recipes
4.0.0
2、实现代码
public class Lock {
public static void main(String[] args) {
CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("10.13.1.171:2181", 5000, 4000, new ExponentialBackoffRetry(1000, 3)); curatorFramework.start(); InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/lock"); for (int i = 0; i < 10; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "尝试获得锁"); try {
lock.acquire(); System.out.println(Thread.currentThread().getName() + "获得锁"); } catch (Exception e) {
e.printStackTrace(); } try {
Thread.sleep(2000); lock.release(); System.out.println(Thread.currentThread().getName() + "释放锁 >>>"); } catch (InterruptedException e) {
e.printStackTrace(); } catch (Exception e) {
e.printStackTrace(); } }).start(); } }}
3、执行结果

在这里插入图片描述

三、代码下载

https://github.com/huangliangyun/Spring-Boot-2.X/tree/master/spring-boot-zookeeper

ABOUT

公众号:【星尘Pro】

github:

推荐阅读

转载地址:http://cyfsi.baihongyu.com/

你可能感兴趣的文章
进入IT企业必读的324个Java面试题
查看>>
九度OJ 题目1169:比较奇偶数个数
查看>>
九度OJ 题目1089:数字反转
查看>>
九度OJ 题目1098:字母统计
查看>>
九度OJ 题目1032:ZOJ
查看>>
九度OJ 题目1115:数字求和
查看>>
九度OJ 题目1022:游船出租
查看>>
九度OJ 题目1206:字符串连接
查看>>
九度OJ 题目1192:回文字符串
查看>>
九度OJ 题目1196:成绩排序
查看>>
九度OJ 题目1203:IP地址
查看>>
九度OJ 题目1179:阶乘
查看>>
九度OJ 题目1180:对称矩阵
查看>>
九度OJ 题目1187:最小年龄的3个职工
查看>>
string.h总结
查看>>
九度OJ 题目1182:统计单词
查看>>
九度OJ 题目1171:C翻转
查看>>
九度OJ 题目1174:查找第K小数
查看>>
九度OJ 题目1175:打牌
查看>>
中国剩余定理
查看>>