zookeeper实现的分布式锁
2024-09-03 15:13:42
在分布式系统中,多个jvm对共享资源进行操作时候,要加上锁,这就是分布式锁
利用zookeeper的临时节点的特性,可以实现分布式锁
public class ZookeeperDistrbuteLock extends ZookeeperAbstractLock { @Override
boolean tryLock() {
try {
zkClient.createEphemeral(lockPath);
return true;
} catch (Exception e) {
return false;
} } @Override
void waitLock() { // 使用zk临时事件监听
IZkDataListener iZkDataListener = new IZkDataListener() { public void handleDataDeleted(String path) throws Exception {
if (countDownLatch != null) {
countDownLatch.countDown();
}
} public void handleDataChange(String arg0, Object arg1) throws Exception { }
};
// 注册事件通知
zkClient.subscribeDataChanges(lockPath, iZkDataListener);
if (zkClient.exists(lockPath)) {
countDownLatch = new CountDownLatch();
try {
countDownLatch.await();
} catch (Exception e) {
// TODO: handle exception
}
}
// 监听完毕后,移除事件通知
zkClient.unsubscribeDataChanges(lockPath, iZkDataListener);
} }
项目结构:
github下载地址:https://github.com/jake1263/zookeeper-lock
最新文章
- JMeter常见问题集合
- Linux档案与目录管理
- git使用札记
- confluence wiki搭建使用
- asp.net解析请求报文
- Linux技巧:一次删除一百万个文件最快方法
- 3月3日(6) Climbing Stairs
- cocos2d 高仿doodle jump 无源代码
- codevs 1220 数字三角形
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- win 下python2.7 pymssql连接ms sqlserver 2000
- 使用JS通过正则限制input的输入
- 1077. [NOIP2010冲刺六] 数列游戏
- Deep Reinforcement Learning for Dialogue Generation 论文阅读
- async+await处理异步问题
- 通过eclipse打开jdk native源码
- Deploying JAR Package &; JSP Page in EBS R12.2.4 WLS
- 从晶体管到web浏览器
- mfc Picture Control 控件属性
- mysql备份和还原命令
热门文章
- [Git] --amend
- 使用openrc 管理容器中的服务
- JS的ES6扩展
- JMeter的基本使用
- Cisco路由器用SSH替代Telnet连接
- Lucene创建索引和索引的基本检索(Lucene 之 Hello World)
- Xshell远程登录
- Java将list<;map>;或者list<;entity>;集合根据指定字段排序
- 【Dubbo】带着问题看源码:什么是SPI机制?Dubbo是如何实现的?
- 把ngnix注册为linux服务 将Nginx设置为linux下的服务 并设置nginx开机启动