在分布式系统中,多个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

最新文章

  1. JMeter常见问题集合
  2. Linux档案与目录管理
  3. git使用札记
  4. confluence wiki搭建使用
  5. asp.net解析请求报文
  6. Linux技巧:一次删除一百万个文件最快方法
  7. 3月3日(6) Climbing Stairs
  8. cocos2d 高仿doodle jump 无源代码
  9. codevs 1220 数字三角形
  10. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
  11. win 下python2.7 pymssql连接ms sqlserver 2000
  12. 使用JS通过正则限制input的输入
  13. 1077. [NOIP2010冲刺六] 数列游戏
  14. Deep Reinforcement Learning for Dialogue Generation 论文阅读
  15. async+await处理异步问题
  16. 通过eclipse打开jdk native源码
  17. Deploying JAR Package & JSP Page in EBS R12.2.4 WLS
  18. 从晶体管到web浏览器
  19. mfc Picture Control 控件属性
  20. mysql备份和还原命令

热门文章

  1. [Git] --amend
  2. 使用openrc 管理容器中的服务
  3. JS的ES6扩展
  4. JMeter的基本使用
  5. Cisco路由器用SSH替代Telnet连接
  6. Lucene创建索引和索引的基本检索(Lucene 之 Hello World)
  7. Xshell远程登录
  8. Java将list<map>或者list<entity>集合根据指定字段排序
  9. 【Dubbo】带着问题看源码:什么是SPI机制?Dubbo是如何实现的?
  10. 把ngnix注册为linux服务 将Nginx设置为linux下的服务 并设置nginx开机启动