Java并发工具类CyclicBarrier

标签: java 并发 工具 | 发表时间:2015-09-24 20:53 | 作者:xiangshimoni
出处:http://blog.csdn.net

CyclicBarrier同步屏障

java并发工具类中有一个叫做CyclicBarrier的类,与CountDownLatch类似,都可以实现线程间的同步,但是差别是CyclicBarrier是可重置的同步屏障。

想象一个场景,有N个人不同时间走到一扇门,因为门需要N个人合力才能推开,所以人不足N个时,只能阻塞在此,等到N个人都到了之后,可以推开门,继续进行之前的工作。CyclicBarrier就是这扇门。

看看下面的代码,定义了一个线程数为2的,CyclicBarrier,并在主线程和另外一个线程中调用await进行阻塞:

  import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;


public class Main {
    static CyclicBarrier cyclicBarrier = new CyclicBarrier(2);

    public static void main(String[] args) throws InterruptedException, BrokenBarrierException{
    new Thread(new Runnable() {

        @Override
        public void run() {
        System.out.println("thread 1 start");
        try {
            cyclicBarrier.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (BrokenBarrierException e) {
            e.printStackTrace();
        }
        System.out.println("thread 1 end");
        }
    }).start();

     System.out.println("thread 2 start");
     cyclicBarrier.await();
     System.out.println("thread 2 end");
    }

}

根据线程调度的顺序,执行结果又多种,一种是:

thread 2 start
thread 1 start
thread 1 end
thread 2 end

但是所有执行效果的共同点是,必须所有线程都在await同步点阻塞之后,才能进行下一步的操作。

可以调用CyclicBarrier的reset()方法进行重置,以便在复杂场景中进行错误恢复等操作。
另外CyclicBarrier还有如下的构造函数:

   public CyclicBarrier(int parties, Runnable barrierAction) {
        if (parties <= 0) throw new IllegalArgumentException();
        this.parties = parties;
        this.count = parties;
        this.barrierCommand = barrierAction;
    }

可以提供一个Runnable的参数,在线程都到达屏障时,优先执行barrierAction。

作者:xiangshimoni 发表于2015/9/24 12:53:42 原文链接
阅读:206 评论:0 查看评论

相关 [java 并发 工具] 推荐:

Java并发工具类CyclicBarrier

- - CSDN博客编程语言推荐文章
CyclicBarrier同步屏障. java并发工具类中有一个叫做CyclicBarrier的类,与CountDownLatch类似,都可以实现线程间的同步,但是差别是CyclicBarrier是可重置的同步屏障. 想象一个场景,有N个人不同时间走到一扇门,因为门需要N个人合力才能推开,所以人不足N个时,只能阻塞在此,等到N个人都到了之后,可以推开门,继续进行之前的工作.

Java:线程并发工具类

- - CSDN博客编程语言推荐文章
一、CountDownLatch . 在实际多线程并发开发过程中,我们会碰见很多等待子线程完毕后在继续执行的情况,(如多个子线程下载文件,所有子线程执行完毕后再重命名为文件名). CountDownLatch的构造函数接受一个int类型的参数作为计数器,调用countDwon()方法,计数器减1,await()方法阻塞当前线程,直到计数器变为0;、 .

Java并发编程基础

- - 并发编程网 - ifeve.com
并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力. 如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善. 现代的PC都有多个CPU或一个CPU中有多个核. 是否能合理运用多核的能力将成为一个大规模应用程序的关键. 进程是以独立于其他进程的方式运行的,进程间是互相隔离的.

java 并发编程 synchronized

- - Java - 编程语言 - ITeye博客
同步原语--synchronized. synchronized(class)很特别,它会让另一个线程在任何需要获取class做为monitor的地方等待.class与this做为不同的监视器可以同时使用,不存在一个线程获取了class,另一个线程就不能获取该class的一切实例.. ->线程各自获取monitor,不会有等待..

Java开源建站工具

- Amom - 阮一峰的网络日志
美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单. 他的语言平台是Java,开发项目是一个网站(还未上线). 所用到的工具都是开源的,可以免费得到. 在目前的创业者之中,用Java作为网站开发语言的人似乎很少. 这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事.

java监测工具之jstat

- - 开源软件 - ITeye博客
用以判断JVM是否存在内存问题呢. 如何判断JVM垃圾回收是否正常. 一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序. Jstat是JDK自带的一个轻量级小工具. 全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控.

java图片处理工具

- - CSDN博客推荐文章
作者:kuanghongjiang 发表于2015-2-1 15:45:51 原文链接. 阅读:0 评论:0 查看评论.

Java常用工具包 Jodd

- - Java - 编程语言 - ITeye博客
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架. Jodd 被分成众多模块,按需选择,其中. jodd-core        一些工具类,包括. Fast buffers等等. jodd-bean        BeanUtil以及类型检查转换工具. jodd-props       更强大的Java Properties替代.

Java监控常用工具

- - 编程语言 - ITeye博客
Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助. 用途:jps用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等. -l: 输出完成的包名称;. -m: 输出程序的命令行输入参数;. -v: 输出完整的JVM参数. 用途:1)查看java程序崩溃生成core文件,获得core文件的java stack和native stack的信息;2)查看正在运行的java程序的java stack和native stack的信息:a) 查看运行的java程序呈现hung的状态;b) 跟踪Java的调用栈,剖析程序.