06.Curator Barrier

1.栅栏Barrier
/*** @param client client* @param barrierPath path to use as the barrier*/public DistributedBarrier(CuratorFramework client, String barrierPath)
- setBarrier() - 设置栅栏
- waitOnBarrier() - 等待栅栏移除
- removeBarrier() - 移除栅栏
public class DistributedBarrierExample{private static final int QTY = 5;private static final String PATH = "/examples/barrier";public static void main(String[] args) throws Exception{CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));client.start();ExecutorService service = Executors.newFixedThreadPool(QTY);DistributedBarrier controlBarrier = new DistributedBarrier(client, PATH);controlBarrier.setBarrier();for (int i = 0; i < QTY; ++i){final DistributedBarrier barrier = new DistributedBarrier(client, PATH);final int index = i;Callable<Void> task = new Callable<Void>(){@Overridepublic Void call() throws Exception{Thread.sleep((long) (3 * Math.random()));System.out.println("Client #" + index + " 等待");barrier.waitOnBarrier();System.out.println("Client #" + index + " 开始");return null;}};service.submit(task);}Thread.sleep(1000 * 3);System.out.println("所有的Client都在等待");controlBarrier.removeBarrier();service.shutdown();service.awaitTermination(10, TimeUnit.MINUTES);client.close();System.out.println("OK!");}}
Client #1 等待Client #2 等待Client #0 等待Client #4 等待Client #3 等待所有的Client都在等待Client #4 开始Client #2 开始Client #0 开始Client #3 开始Client #1 开始OK!

2.双栅栏Double Barrier
// client - the client// barrierPath - path to use// memberQty - the number of members in the barrierpublic DistributedDoubleBarrier(CuratorFramework client, String barrierPath, int memberQty)
- enter()、enter(long maxWait, TimeUnit unit) - 等待同时进入栅栏
- leave()、leave(long maxWait, TimeUnit unit) - 等待同时离开栅栏
public class DistributedBarrierDoubleExample{private static final int QTY = 5;private static final String PATH = "/examples/barrier";public static void main(String[] args) throws Exception{CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));client.start();ExecutorService service = Executors.newFixedThreadPool(QTY);for (int i = 0; i < (QTY + 2); ++i){final DistributedDoubleBarrier barrier = new DistributedDoubleBarrier(client, PATH, QTY);final int index = i;Callable<Void> task = new Callable<Void>(){@Overridepublic Void call() throws Exception{Thread.sleep((long) (3 * Math.random()));System.out.println("Client #" + index + " 等待");if(false == barrier.enter(5, TimeUnit.SECONDS)){System.out.println("Client #" + index + " 等待超时!");return null;}System.out.println("Client #" + index + " 进入");Thread.sleep((long) (3000 * Math.random()));barrier.leave();System.out.println("Client #" + index + " 结束");return null;}};service.submit(task);}service.shutdown();service.awaitTermination(10, TimeUnit.MINUTES);client.close();System.out.println("OK!");}}
Client #0 等待Client #2 等待Client #3 等待Client #4 等待Client #1 等待Client #4 进入Client #2 进入Client #0 进入Client #1 进入Client #3 进入Client #4 结束Client #5 等待Client #2 结束Client #3 结束Client #6 等待Client #0 结束Client #1 结束Client #5 等待超时!Client #6 等待超时!OK!

-------------------------------------------------------------------------------------------------------------------------------
06.Curator Barrier的更多相关文章
- [译]ZOOKEEPER RECIPES-Barriers
Barrier 在分布式系统中常使用Barrier来阻塞进程,当满足一定条件后再恢复进行后续操作.Barrier在Zookeeper中可以通过设计一个Barrier节点来实现.Barrier 节点存在 ...
- CuratorBarrier
一.DistributedDoubleBarrier 同时开始,同时结束 package bjsxt.curator.barrier; import java.util.Random; import ...
- 六、curator recipes之屏障barrier
简介 curator针对分布式场景实现了分布式屏障:barrier.我们在分布式系统中可以使用barrier去阻塞进程,知道某个条件被触发.其实跟Java多线程的barrier是一样的. 例如:当两个 ...
- Apache Curator获得真正的
Apache Curator获得真正的 Curator它是Netflix一家公司来源Zookeeper顾客,与Zookeeper相比于提供本地客户端,Curator的抽象层次更高,简化了Zookeep ...
- Apache Curator入门实战
Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...
- Apache Curator: Zookeeper客户端
Apache Curator Framework url: http://curator.apache.org/curator-framework/ The Curator Framework is ...
- Zookeeper开源客户端框架Curator简介
Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...
- 内存屏障(Memory barrier)-- 转发
本文例子均在 Linux(g++)下验证通过,CPU 为 X86-64 处理器架构.所有罗列的 Linux 内核代码也均在(或只在)X86-64 下有效. 本文首先通过范例(以及内核代码)来解释 Me ...
- Zookeeper开源客户端框架Curator简介[转]
Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情 ...
随机推荐
- [原]SQL相关路径查询脚本
--1.查询机器名 SELECT @@servername AS 机器名称 --查询已安装的SQL实例名 SELECT * FROM Sys.Servers --2.查询SQL安装路径 DECLARE ...
- JQuery实现选择特定楼层回复
JQuery实现选择特定楼层回复 需求: 一个论坛里面的小功能,除了回复帖子之外,也能够回复帖子以下的回复.详细实现细节: 每个回复有一个"回复"按钮,点击按钮实现: 在form表 ...
- Xilinx-7Series-FPGA高速收发器使用学习—RX接收端介绍
上一篇博文介绍了GTX的发送端,这一篇将介绍GTX的RX接收端,GTX RX接收端的结构和TX发送端类似,数据流方向相反,不过和发送端也有一些区别,GTX的RX接收端结构图如图1所示: 图1 下面将根 ...
- CXAnimation类
#include "XAnimation.h" CXAnimation::CXAnimation(void) { m_strName = ""; m_nFram ...
- JSON 之GSON 解析
一. 谷歌GSON这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象.Gson支持任意复杂Java对象包括没有源代码的对象. 二.Gson解析Json ...
- 用wget做站点镜像
用wget做站点镜像 -- :: 分类: LINUX # wget -r -p -np -k http://xxx.edu.cn -r 表示递归下载,会下载所有的链接,不过要注意的是,不要单独使用这个 ...
- filter函数和map函数
filter filter()函数接收一个函数 f 和一个可迭代对象,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返 ...
- java中的类加载器ClassLoader和类初始化
每个类编译后产生一个Class对象,存储在.class文件中,JVM使用类加载器(Class Loader)来加载类的字节码文件(.class),类加载器实质上是一条类加载器链,一般的,我们只会用到一 ...
- saveFile()方法
saveFile的原理就是将流写入到需要写入的文件,通过可以用“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:public vo ...
- eclipse代码补全按键修改成Tab
https://www.eclipse.org/downloads/compare.php?release=oxygen 下载eclipse带有源文件的版本 打开Eclipse,点击 window - ...