简介

curator实现了一个类似容器的锁InterProcessMultiLock,它可以把多个锁包含起来像一个锁一样进行操作,简单来说就是对多个锁进行一组操作。当acquire的时候就获得多个锁资源,否则失败。当release时候释放所有锁资源,不过如果其中一把锁释放失败将会被忽略。

官方文档:http://curator.apache.org/curator-recipes/multi-shared-lock.html

javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/locks/InterProcessMultiLock.html

代码示例

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessLock;
import org.apache.curator.framework.recipes.locks.InterProcessMultiLock;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry; import java.util.ArrayList;
import java.util.List; public class MultiLockDemo {
private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 2));
private static String path1 = "/mutex/001";
private static String path2 = "/mutex/002";
private static List<InterProcessLock> mutexes = new ArrayList<>();
private static InterProcessMutex mutex1;
private static InterProcessMutex mutex2; static {
mutex1 = new InterProcessMutex(client, path1);
mutex2 = new InterProcessMutex(client, path2);
mutexes.add(mutex1);
mutexes.add(mutex2);
client.start();
} public static void main(String[] args) throws Exception {
InterProcessMultiLock multiLock = new InterProcessMultiLock(mutexes);
multiLock.acquire();
System.out.println("acquired multi lock");
startThread0();
startThread1();
Thread.sleep(5000);
multiLock.release();
System.out.println("release multi lock");
Thread.sleep(50000);
client.close();
} public static void startThread0() throws InterruptedException {
Thread.sleep(1000);
new Thread(() -> {
try {
System.out.println("thread0 acquring");
mutex1.acquire();
System.out.println("thread0 acquired");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
mutex1.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} public static void startThread1() throws InterruptedException {
Thread.sleep(1000);
new Thread(() -> {
try {
System.out.println("thread1 acquiring");
mutex2.acquire();
System.out.println("thread1 acquired");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
mutex2.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}

十一、curator recipes之联锁InterProcessMultiLock的更多相关文章

  1. 九、curator recipes之不可重入锁InterProcessSemaphoreMutex

    简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况 ...

  2. 四、curator recipes之共享重入互斥锁

    简介 curator的recipes实现了可重入互斥锁,允许你在分布式场景下多个进程之间实现锁的互斥以协调多进程执行. 相关类:InterProcessMutex 官方文档:http://curato ...

  3. 二十一、curator recipes之TreeCache

    简介 curator的TreeCache允许对某个路径的数据和路径变更以及其下所有子孙节点的数据和路径变更进行监听. 官方文档:http://curator.apache.org/curator-re ...

  4. curator教程二——分布式锁

    简介   在分布式环境下,为了防止多个服务同时修改同一个值,出现数据同步问题,通常用redis和zookeeper做分布式锁,在这里我们用zookeeper做分布式锁,并和单点环境中ReenTranL ...

  5. 三、curator recipes之共享的可重入读写锁

    简介 curator实现了跨JVM的可重入读写互斥锁.它使用zookeeper去进行加锁,所以指定相同路径的处理线程将会基于“公平锁”的机制去竞争锁资源. 读写锁包含了读锁.写锁两个,它们的互斥关系如 ...

  6. curator 实现分布式一致性锁

    最近准备在项目中引入分布式锁,故而研究基于zookeeper的curator框架. 网上资料不多,自己研究其源码发现,这个框架已经帮我做了很多现成的实现. 下面介绍下锁的实现: 通过源码中Lockin ...

  7. 二十、curator recipes之NodeCache

    简介 Curator的NodeCache允许你监听一个节点,当节点数据更改或者节点被删除的时候将会触发监听. 官方文档:http://curator.apache.org/curator-recipe ...

  8. 十九、curator recipes之PathChildrenCache

    简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html ...

  9. 十八、curator recipes之DistributedDelayQueue

    简介 curator实现了类似DelayQueue的分布式延迟队列 官方文档:http://curator.apache.org/curator-recipes/distributed-delay-q ...

随机推荐

  1. 激活IDEA,pycharm方法

    1.修改hosts文件将0.0.0.0 account.jetbrains.com添加到hosts文件最后,注意hosts文件无后缀,如果遇到无法修改或权限问题,可以采用覆盖的方法去替换hosts文件 ...

  2. C# 未安装Office环境下使用NPOI导出Excel文件

    1.NuGet直接安装NPOI程序包: 2. using NPOI.XSSF.UserModel; 3.导出Excel代码: private void TsbExport2ExcelClick(obj ...

  3. Linux 中排除掉筛选的文件

    以下命令以网站目录www为例做介绍,有时候更新网站的时候需要保留比如图片目录,或者其他目录就需要这样的操作 实例一: 删除文件夹内所有文件只保留一个文件命令 [root@linuxzgf www]# ...

  4. linux下查找命令总结

    查找命令总结,which,whereis,find,locate,type http://blog.csdn.net/jessica1201/article/details/8139249   1.f ...

  5. spring-boot打包,引入外部jar包问题

    这是我引入的外部jar包,打包的时候找不到外部jar包路径 弄了好久 在lib下引入外部jar包,运行没问题,但是打包是出现问题了,具体解决办法 再pom中加入如下配置,告诉maven导入本地jar ...

  6. 阿里云服务器之Tomcat环境搭建以及域名绑定

    上一步主要主要讲解在服务器中建立自己的hexo博客环境,最后达到可以远程访问,以及远程git推送到github.这章主要讲解Tomcat环境的搭建,以及域名解析.到这里你的服务器以及可以被全世界的人民 ...

  7. 2016级算法第六次上机-G.ModricWang likes geometry

    1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码

  8. ReactNative常用组件库 victory-native 图表

    victory-native 是不错的图表组件,支持很多种图表 地址: https://github.com/FormidableLabs/victory-native 先安装 react-nativ ...

  9. 【Alpha】Phylab 展示博客

    目录 Phylab Alpha 展示博客 一.团队简介 二.项目目标 2.1 典型用户 2.2 功能描述 2.3 用户量 三.项目发布与展示 3.1 新功能 3.2 修复缺陷 3.3 问题与限制 3. ...

  10. HDU - 6133 启发式合并

    题意:给出一棵树共\(n\)个顶点,每个顶点有一个权值\(val_i\),你需要对每个节点统计一个最优解 每个节点的解按照一定规则产生:取出该节点的子树下所有的顶点,把顶点任意排序成一个序列,设为\( ...