基础知识:http://www.cnblogs.com/LiZhiW/p/4931577.html

1 可重入读写锁示例代码如下(lock.acquire加几个,就必须使用几个lock.release()释放):

package com.topsec.lock;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry; /**
* 测试可重入锁(可以多次获得锁不会被阻塞,释放时也需释放多把锁)
* @author 76524
*
*/
public class SharedReentrantLock1 implements Runnable{
private InterProcessMutex lock;//可重入锁实现类
private String lockPAth = "/lock/shareLock";
private int i;
private String clientName;
//zookeeper集群地址
public static final String ZOOKEEPERSTRING = "192.168.99.129:2181,192.168.99.153:2181,192.168.99.171:2181"; public SharedReentrantLock1(CuratorFramework client,String clientName) {
lock = new InterProcessMutex(client, lockPAth);
this.clientName = clientName;
} public void run() {
try {
Thread.sleep((new java.util.Random().nextInt(2000)));
lock.acquire(); //增加第一把锁
if(lock.isAcquiredInThisProcess()) {
System.out.println(clientName + " 获得锁");
i++;
}
lock.acquire(); //增加第二把锁
} catch (Exception e) {
e.printStackTrace();
}finally {
try { System.out.println(clientName+"释放第一把锁");
lock.release();
System.out.println(clientName+"释放第二把锁");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static void main(String[] args) {
CuratorFramework client = CuratorFrameworkFactory.newClient(ZOOKEEPERSTRING, new ExponentialBackoffRetry(1000, 3));
client.start();
//启动100个线程进行测试
for(int i = 0;i<100;i++) {
SharedReentrantLock1 sharedReentrantLock = new SharedReentrantLock1(client, "第"+i+"个客户端:");
Thread thread = new Thread(sharedReentrantLock);
thread.start();
}
} }

2:不可重入锁示例代码如下(lock.acquire加几个都只相当于加一个):

package com.topsec.lock;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessSemaphoreMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;
/**
* 测试不可重入锁(只能获得一次锁,使用完后释放)
* @author 76524
*
*/
public class SharedNOReentrantLock implements Runnable{
private InterProcessSemaphoreMutex lock;//不可重入锁
private String lockPAth = "/lock/shareLock";
private int i;
private String clientName;
//zookeeper集群地址
public static final String ZOOKEEPERSTRING = "192.168.99.129:2181,192.168.99.153:2181,192.168.99.171:2181"; public SharedNOReentrantLock(CuratorFramework client,String clientName) {
lock = new InterProcessSemaphoreMutex(client, lockPAth);
this.clientName = clientName;
} public void run() {
try {
Thread.sleep((new java.util.Random().nextInt(2000)));
lock.acquire(); //增加第一把锁
if(lock.isAcquiredInThisProcess()) {
System.out.println(clientName + " 获得锁");
i++;
}
lock.acquire(); //增加第二把锁这个锁相当于不起作用
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
// lock.release();
System.out.println(clientName+"释放第一把锁");
lock.release();
System.out.println(clientName+"释放第二把锁");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static void main(String[] args) {
CuratorFramework client = CuratorFrameworkFactory.newClient(ZOOKEEPERSTRING, new ExponentialBackoffRetry(1000, 3));
client.start();
for(int i = 0;i<100;i++) {
SharedReentrantLock2 sharedReentrantLock = new SharedReentrantLock2(client, "第"+i+"个客户端:");
Thread thread = new Thread(sharedReentrantLock);
thread.start();
}
} }

8、Zookeeper分布式锁的更多相关文章

  1. Curator Zookeeper分布式锁

    Curator Zookeeper分布式锁 pom.xml中添加如下配置 <!-- https://mvnrepository.com/artifact/org.apache.curator/c ...

  2. ZooKeeper 分布式锁实现

    1 场景描述 在分布式应用, 往往存在多个进程提供同一服务. 这些进程有可能在相同的机器上, 也有可能分布在不同的机器上. 如果这些进程共享了一些资源, 可能就需要分布式锁来锁定对这些资源的访问. 2 ...

  3. ZooKeeper分布式锁浅谈(一)

    一.概述 清明节的时候写了一篇分布式锁概述,里面介绍了分布式锁实现的几种方式,其实那时候我一直沉迷于使用redis的悲观锁和乐观锁来实现分布式锁,直到一个血案的引发才让我重新认识了redis分布式锁的 ...

  4. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

  5. 跟着大神学zookeeper分布式锁实现-----来自Ruthless

    前几天分享了@Ruthless大神的Redis锁,发现和大家都学习了很多东西.因为分布式锁里面,最好的实现是zookeeper的分布式锁.所以在这里把实现方式和大家分享一下. zookeeper分布式 ...

  6. zookeeper分布式锁

    摘要:分享牛原创,zookeeper使用,zookeeper锁在实际项目开发中还是很常用的,在这里我们介绍一下zookeeper分布式锁的使用,以及我们如何zookeeper分布式锁的原理.zooke ...

  7. 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁

    首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...

  8. zookeeper 分布式锁原理

    zookeeper 分布式锁原理: 1 大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高.利用基于googl ...

  9. 分布式锁(一) Zookeeper分布式锁

    什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理.分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而 ...

  10. ZooKeeper 分布式锁

    在Redis分布式锁一文中, 作者介绍了如何使用Redis开发分布式锁. Redis分布式锁具有轻量高吞吐量的特点,但是一致性保证较弱.我们可以使用Zookeeper开发分布式锁,来满足对高一致性的要 ...

随机推荐

  1. JavaScript·DOM,BOM

    YI.DOM 1.创建DOM 2.删除DOM 3.文档碎片 文档碎片可以提高DOM操作性能(理论上) 文档碎片(类似于一个口袋,先将多个元素放在口袋里,放完之后,再将口袋放到最终要插入的元素中): d ...

  2. LSC问题(不连续问题)

    转载:http://blog.csdn.net/v_JULY_v/article/details/6110269 本文是动态规划算法中,网上写得最好的一个之一.看完很容易理解.需要重点理解的部分,我会 ...

  3. sublime text 3搭建python

    1.ST3下载地址: http://www.sublimetext.com/3 2.安装Sublime Text Build 3114 Setup.exe应用程序. 3.ST3的工具优点就是轻量级,简 ...

  4. java中的hashmap理解

    转自大神,以便以后翻阅http://www.cnblogs.com/whgk/p/6091316.html

  5. 基于webpack的react开发环境搭建新手教程

    最近学习react-webpack项目搭建,找到一篇我认为不错的博客,跟着学习了一番,写得很详细很好,本篇博客纯属记录总结,要看更详细的搭建过程及解析,请戳: 基于webpack的React项目搭建( ...

  6. 项目里如何访问AppDelegate

    项目里面访问AppDelegate做全局变量用有好几种方式 最原始就是 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shared ...

  7. vs code 操作Git

    首次从Git拉取项目:Ctrl+Shift+p 选择Git 克隆 拉取成功后 Ctrl+波浪号进入控制台选择终端 使用npm install下载依赖 到此就从Git拉取成功了: 如果提示npm错误,有 ...

  8. SOCKET.IO 的用法 系统API,

    原文:http://www.cnblogs.com/xiezhengcai/p/3956401.html 1. 服务端 io.on('connection',function(socket)); 监听 ...

  9. http协议状态码解析

    关键词 HTTP协议 状态码 摘要 本文列出了HTTP协议的所有的状态码,并对每个状态码的含义作了深入的解释,以便大家参考.   本文列出了HTTP协议的所有的状态码,并对每个状态码的含义作了深入的解 ...

  10. Python 汉诺塔

    在汉诺塔游戏中,有三个分别命名为A.B.C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每个原盘中间有一个小孔.最初,所有得圆盘都在A塔座上,其中最大得圆盘在最下面,然后是第二大,以此类推. 游戏 ...