java CyclicBarrier的介绍和使用

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

举例说明:银行要进行账目录入,以防一个录入出现录入错误,采用两人对同一账目同时录入,以达到校对的效果

伪代码如下:

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

/**
 * Created by lv xiao long on 2017/7/16.
 */
public class Work implements Runnable {

    private CyclicBarrier barrier;
    private String msg;

    public Work(String msg, CyclicBarrier  barrier){
        this.msg=msg;
        this.barrier=barrier;
    }
    public void run() {
        while (true) {
            System.out.print(msg);
            try {
                barrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
            break;
        }
    }
}
import java.util.concurrent.CyclicBarrier;

/**
 * by lv xiao long
 *
 */
public class App
{
    public static void main( String[] args )
    {
        //这里设置公共屏障点为3,两个子线程都到达屏障点后,主线程在放行,进入下账目录入,所以这里设置屏障点数为3
        CyclicBarrier cyclicBarrier=new CyclicBarrier(3);
        Work work=new Work("工作人员A录入完成\n",cyclicBarrier);
        Thread thread=new Thread(work);
        thread.start();
        work=new Work("工作人员B录入完成\n",cyclicBarrier);
        thread=new Thread(work);
        thread.start();
        try {
            cyclicBarrier.await();
            System.out.println( "可以开始进行下一账目录入!\n" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这里CycliBarrer 还有一个高级用法api如下

 /**
     * Creates a new <tt>CyclicBarrier</tt> that will trip when the
     * given number of parties (threads) are waiting upon it, and which
     * will execute the given barrier action when the barrier is tripped,
     * performed by the last thread entering the barrier.
     *
     * @param parties the number of threads that must invoke {@link #await}
     *        before the barrier is tripped
     * @param barrierAction the command to execute when the barrier is
     *        tripped, or {@code null} if there is no action
     * @throws IllegalArgumentException if {@code parties} is less than 1
     */
    public CyclicBarrier(int parties, Runnable barrierAction) {
        if (parties <= 0) throw new IllegalArgumentException();
        this.parties = parties;
        this.count = parties;
        this.barrierCommand = barrierAction;
    }

在进行实例化的时候可以现设置一个线程

CyclicBarrier cyclicBarrier=new CyclicBarrier(3,work3);当所有线程达到指定屏障点后启动work3线程
时间: 2024-10-21 21:18:22

java CyclicBarrier的介绍和使用的相关文章

java.util.concurrent介绍

(本文由 blog博主Caoer(草儿)原创,此处为转载. ) java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作.通过提供一组可靠的.高性能并发构建块,开发人员可以提高并发类的线程安全.可伸缩性.性能.可读性和可靠性. 如果一些类名看起来相似,可能是因为 java.util.concurrent 中的许多概念源自 Doug L

java.util.concurrent介绍【转】

java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作.通过提供一组可靠的.高性能并发构建块,开发人员可以提高并发类的线程安全.可伸缩性.性能.可读性和可靠性. 如果一些类名看起来相似,可能是因为 java.util.concurrent 中的许多概念源自 Doug Lea 的 util

Java垃圾回收介绍(译)

在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的.与C语言不同的是,在Java中开发者不需要专门为垃圾回收写代码.这是使Java流行的众多特征之一,也帮助了程序员写出了更好的Java应用. 这是一个四部分的系列教程,以了解在Java中垃圾回收的基础, Java垃圾回收介绍 Java垃圾回收如何工作? Java垃圾回收器的类型 监控和分析Java垃圾回收 这篇教程是系列中的第一部分.本篇中会解释一些基本术语,像JDK,JVM,JRE,HotSpot VM,然后去理解JVM

JAVA SSH 框架介绍

SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注.Struts把Servlet.JSP.自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套M

java 的简单介绍

一.Java 特点     1.简单: 和C++相比较     2.面向对象     3.跨平台    由于它是先编译后解释 + JVM(屏蔽底层操作系统的差异) 二.程序的运行一般有两种:     1.编译  源文件 ------> 编译器  机器码文件       快  无法跨平台     2.解释  源文件 ------> 解释器  逐行翻译并运行   慢  可以跨平台 三.Java运行机制: 先编译,后解释     .java 源文件  -------> 编译器 .class 字

java面向对象的介绍

面向对象 编程思想 从需求出发 从现实世界出发 对象:一切客观存在的事物 什么都是对象 是什么 is a 继承 属性:有什么 has a 关联(聚合) 方法:能做什么 use a 依赖 面向对象思想:先找到解决问题所需的对象,再通过对象间的联系(3种关系)完成需求 计算机中的对象: 数据(连续的存储空间) 代表了生活中的对象 模拟了现实世界中的对象关系 面向对象的优势: 1.各司其职 封装 2.弱耦合性 多态 接口 3.可重用性 封装 4.可扩展性 继承 类: 对象共性的抽象,是人对对象的认识

Java Web开发介绍

转自:http://www.cnblogs.com/pythontesting/p/4963021.html Java Web开发介绍 简介 Java很好地支持web开发,在桌面上Eclipse RCP谈不上成功,JAVA是主要用在服务器端,和Python一样是极其重要的Web后台开发语言. Java Web应用通常不直接在服务器上运行,而是在Web容器内.容器提供的运行时环境,提供JVM (Java Virtual Machine)运行本地Java应用.容器本身也运行在JVM. 通常Java的

Java线程池介绍

Java线程池介绍 2015-10-24 ImportNew (点击上方公号,可快速关注) 原文:allegro 译文:ImportNew - paddx 链接:http://www.importnew.com/16845.html 根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年就会翻一倍.但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长.处理器制造商花了很多年来提高时钟频率和指令并行.在新一代的处理器上,单线程程序的执行速率确实有所提高.但是,时钟频率

Java远程技术介绍学习

Java远程技术介绍学习 RMI [既Remote Method Invoke 远程方法调用] 实现方式为,类extend了java.rmi.Remote接口,即成为存在于服务器端的远程对象,提供客户端访问. PS: extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用. 同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远