六、curator recipes之屏障barrier

简介

当两个进程在执行任务的时候,A调用了B,A需要等待B完成以后的通知,我们可以使用curator的屏障功能来实现。

官方文档:http://curator.apache.org/curator-recipes/barrier.html

JavaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/barriers/DistributedBarrier.html

代码示例

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.barriers.DistributedBarrier;
import org.apache.curator.retry.ExponentialBackoffRetry;

public class Barrier {
    private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 3));
    private static String path = "/barrier/001";
    public static void main(String[] args) throws Exception {
        client.start();
        DistributedBarrier barrier = new DistributedBarrier(client, path);
        barrier.setBarrier();
        System.out.println("set barrier");
        notifyTo();
        System.out.println("wait barrier");
        barrier.waitOnBarrier();
        System.out.println("wait end");
        client.close();
    }

    public static void notifyTo() {
        new Thread(() -> {
            DistributedBarrier barrier = new DistributedBarrier(client, path);
            try {
                System.out.println("notify sleep...");
                Thread.sleep(3000);
                barrier.removeBarrier();
                System.out.println("notify remove barrier");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
}

输出结果

set barrier
wait barrier
notify sleep...
notify remove barrier
wait end

主线程等待屏障被移除了以后继续执行

原文地址:https://www.cnblogs.com/lay2017/p/10264421.html

时间: 2024-10-12 07:53:44

六、curator recipes之屏障barrier的相关文章

七、curator recipes之阻塞队列SimpleDistributedQueue

简介 Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue 官方文档:http://curator.apache.org/curator-recipes/simple-distributed-queue.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/SimpleDi

八、curator recipes之选举主节点LeaderSelector

简介 前面我们看到LeaderLatch对于选举的实现:https://www.cnblogs.com/lay2017/p/10264300.html 节点在加入选举以后,除非程序结束或者close()退出选举,否则加点自加入选举以后将持续持有或者保持对主节点的竞争. recipes的另外一个实现Leader Election则不同,被选为主节点的节点任务如果执行完就会放弃主节点,然后由剩下的节点进行主节点竞争.如果你希望已经执行完的主节点再次加入主节点选举那么你需要调用autoRequeue(

九、curator recipes之不可重入锁InterProcessSemaphoreMutex

简介 recipes的InterProcessSemaphoreMutex是一种不可重入的互斥锁,也就意味着即使是同一个线程也无法在持有锁的情况下再次获得锁,所以需要注意,不可重入的锁很容易在一些情况导致死锁,比如你写了一个递归. 官方文档:http://curator.apache.org/curator-recipes/shared-lock.html javaDoc:http://curator.apache.org/curator-recipes/shared-lock.html 代码示

十、curator recipes之信号量InterProcessSemaphoreV2

简介 跟Java并信号量没有什么不同,curator实现的信号量也是基于令牌桶算法,当一个线程要执行的时候就去桶里面获取令牌,如果有足够的令牌那么我就执行如果没有那么我就阻塞,当线程执行完毕也要将令牌放回桶里. 官方文档:http://curator.apache.org/curator-recipes/shared-semaphore.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/reci

十一、curator recipes之多锁InterProcessMultiLock

简介 curator实现了一个类似容器的锁InterProcessMultiLock,它可以把多个锁包含起来像一个锁一样进行操作,简单来说就是对多个锁进行一组操作.当acquire的时候就获得多个锁资源,否则失败.当release时候释放所有锁资源,不过如果其中一把锁释放失败将会被忽略. 官方文档:http://curator.apache.org/curator-recipes/multi-shared-lock.html javaDoc:http://curator.apache.org/a

十九、curator recipes之PathChildrenCache

简介 curator可以监听路径下子节点的变更操作,如创建节点,删除节点 官方文档:http://curator.apache.org/curator-recipes/path-cache.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/PathChildrenCache.html 代码示例 import org.apache.curator.framework.C

二十、curator recipes之NodeCache

简介 Curator的NodeCache允许你监听一个节点,当节点数据更改或者节点被删除的时候将会触发监听. 官方文档:http://curator.apache.org/curator-recipes/node-cache.html javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/cache/NodeCache.html 代码示例 import org.apache.curator.f

UNIX多线程环境下屏障功能(barrier)浅析

说起屏障这个东西,相信对于大多数朋友来说比较陌生,不过要是说起pthread_join这个函数,相信都比较熟悉.我们通常使用这个函数来等待其它线程结束,例如主线程创建一些线程,这些线程去完成一些工作,而主线程需要去等待这些线程结束.其实pthread_join就实现了一种屏障.我们可以对屏障这样理解,把屏障理解为为了协同线程之间的工作而使得某一具体线程进入等待状态的一种机制.下面我们来看看UNIX为我们提供的一个屏障——barrier. 注:与所有的线程函数一样,使用屏障barrier时需要包含

15. 使用Apache Curator管理ZooKeeper

Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来. 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题. 社区已经在ZooKeeper数据模型及其API之上开发了高级框架. Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用. Tips Curator最初由Netflix开发,现在是一个Apache项目. 项目页面位于http://curator.apache.