`
qq466862016
  • 浏览: 125834 次
  • 来自: 杭州
社区版块
存档分类
最新评论

5、Java5多线程---同步辅助工具类CyclicBarrier

阅读更多

Java5多线程---同步辅助工具类CyclicBarrier

一、概述

CyclicBarrier是一个同步的辅助类,它允许一组线程互相等待,直到到达某个公告屏障点。在设计一组固定大小的线程的程序中,这些线程必须不时的相互等待,此时它很有用,因为该屏障在释放等待线程后可以重用,所以称它为循环的屏障下面看看对应的方法。

1、public CyclicBarrier(int parties, Runnable barrierAction)

创建一个新的CycleBarrier,它将在给定数量的参与者(线程)处于等待状态时候启动,并在启动barrier时执行给定的屏障操作,该操作由最后一个今日的屏障的线程执行。参数barrierAction是在启动屏障的时候执行命令,如果不执行任何操作则该参数是null

2、public int await()

        在所有参与者都已经在此barrier上调用 await方法之前,将一直等待。如果当前线程部署将要到达的最后一个线程将禁用它。

3、isBroken

          查询此屏障是否处于损坏状态

4、reset

            将屏障重置为其初始化状态,如果所有参与者目前都在屏障处等待,则它们将返回,而且会抛出一个异常

5、getNumberWaiting

        返回当前在屏障处等待的参与者数目。

 

二、应用案例

 每年都有新兵蛋子入伍,那么每天的集合报到操练是必不可少的。那么我们来利用CyclicBarrier来模拟新兵蛋子 集合-报到-报数-报数完毕-各自入队 这个流程。具体代码如下:

package java5;

import java.util.concurrent.CyclicBarrier;

/***
 * CyclicBarrier 同步辅助类的使用
 * 20个新兵蛋子 集合-报到-报数-各自归队
 * @author dongtian
 * @date   2015年6月16日 下午3:20:38
 */
public class MyArmy {

	private static  CyclicBarrier cyclicBarrier = new CyclicBarrier(20);
	
	
	
	/***
	 * 集合任务
	 * @author dongtian
	 * @date   2015年6月16日 下午2:50:55
	 */
	private static class  SetTask extends Thread {
		
		@Override
		public void run() {
			
			try {
				//开始报到
				System.err.println( Thread.currentThread().getName() + "  报到");
				Thread.currentThread().sleep(1000);
				cyclicBarrier.await();
				//开始报数
				System.err.println(Thread.currentThread().getName() +"  开始报数...");
				cyclicBarrier.await();
				System.err.println(Thread.currentThread().getName() +"  报数完毕!");
				//等到都报完各自归队
				cyclicBarrier.await();
				System.err.println(Thread.currentThread().getName() +"  归队");
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
	}
	public static void main(String[] args) {
		
		for (int i = 0; i < 20; i++) {
			SetTask setTask = new SetTask();
			setTask.start();
		}
		
	}
}

 

 运行结果如下:

Thread-0  报到
Thread-2  报到
Thread-1  报到
Thread-10  报到
Thread-8  报到
Thread-6  报到
Thread-4  报到
Thread-3  报到
Thread-5  报到
Thread-7  报到
Thread-14  报到
Thread-11  报到
Thread-9  报到
Thread-16  报到
Thread-13  报到
Thread-15  报到
Thread-17  报到
Thread-19  报到
Thread-12  报到
Thread-18  报到
Thread-2  开始报数...
Thread-19  开始报数...
Thread-0  开始报数...
Thread-16  开始报数...
Thread-3  开始报数...
Thread-1  开始报数...
Thread-7  开始报数...
Thread-4  开始报数...
Thread-5  开始报数...
Thread-6  开始报数...
Thread-13  开始报数...
Thread-12  开始报数...
Thread-9  开始报数...
Thread-11  开始报数...
Thread-14  开始报数...
Thread-17  开始报数...
Thread-18  开始报数...
Thread-15  开始报数...
Thread-10  开始报数...
Thread-8  开始报数...
Thread-8  报数完毕!
Thread-2  报数完毕!
Thread-19  报数完毕!
Thread-0  报数完毕!
Thread-16  报数完毕!
Thread-4  报数完毕!
Thread-5  报数完毕!
Thread-7  报数完毕!
Thread-6  报数完毕!
Thread-1  报数完毕!
Thread-3  报数完毕!
Thread-13  报数完毕!
Thread-12  报数完毕!
Thread-11  报数完毕!
Thread-9  报数完毕!
Thread-18  报数完毕!
Thread-17  报数完毕!
Thread-14  报数完毕!
Thread-10  报数完毕!
Thread-15  报数完毕!
Thread-15  归队
Thread-2  归队
Thread-19  归队
Thread-8  归队
Thread-0  归队
Thread-4  归队
Thread-6  归队
Thread-7  归队
Thread-5  归队
Thread-1  归队
Thread-13  归队
Thread-12  归队
Thread-16  归队
Thread-3  归队
Thread-9  归队
Thread-18  归队
Thread-11  归队
Thread-14  归队
Thread-10  归队
Thread-17  归队

 具体其它方法可参考官方API文档

 

 

分享到:
评论

相关推荐

    Java多线程之并发工具类

     主要参考资料:java并发编程的艺术、Java并发——同步工具类  二、CountDownLatch(同步倒数计数器)–不仅仅用于多线程  1.作用:允许一个或多个线程等待其他线程完成操作。  CountDownLatch的构造函数...

    JAVA CyclicBarrier类详解.docx

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

    java多线程之CyclicBarrier的使用方法

    主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    详解java多线程的同步控制

    同步控制是并发程序必不可少的重要手段,本文我们将通过重入锁、读写锁、信号量、倒计数器和循环栅栏以及他们的实例来介绍Java并发程序中的同步控制。 目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ...

    个人总结的深入java多线程开发

    看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...

    java线程并发cyclicbarrier类使用示例

    CyclicBarrier类似于CountDownLatch也是个计数器,不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续...

    java并发编程专题(九)----(JUC)浅析CyclicBarrier

    主要介绍了java CyclicBarrier的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    Java多线程开发之CyclicBarrier

     CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用,其相当...

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 ...25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题

    Java中的CyclicBarrier类最全讲义

    目录: 简介 1.1 并发编程与线程协作 ...3.2 使用CyclicBarrier控制线程协作 循环使用CyclicBarrier 4.1 场景介绍 4.2 使用CyclicBarrier循环使用 CyclicBarrier与CountDownLatch的对比 最佳实践与注意事项

    CyclicBarrier用法.docx

    CyclicBarrier是Java中的一个同步工具类,用于协调多个线程之间的同步。它的作用类似于CountDownLatch,可以让一个或多个线程等待其他线程执行完毕后再继续执行。 CyclicBarrier可以被看作是一个屏障,当所有线程都...

    java多线程开发之通过对战游戏学习CyclicBarrier

    给大家分享了关于java多线程开发中通过对战游戏学习CyclicBarrier的相关知识点内容,有兴趣的朋友们学习参考下。

    JAVA并发编程-2-线程并发工具类

    JAVA并发编程-2-线程并发工具类一、Fork/Join1、分而治之与工作密取2、使用标准范式3、Fork/Join的同步用法4、Fork/Join的异步用法二、CountDownLatch三、CyclicBarrier四、Semaphore信号量五、Exchanger ...

    JUC多线程学习个人笔记

    JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于...并发工具类:JUC提供了一些并发编程的工具类,如Semaphore、CountDownLatch、CyclicBarrier等,可以实现线程间的协作和同步。

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    主要介绍了Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java并发实例之CyclicBarrier的使用

    主要介绍了Java并发实例之CyclicBarrier的使用,涉及CyclicBarrier的介绍,以及相关的并发实例,具有一定参考价值,需要的朋友可以了解下。

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

    CyclicBarrier实现多个线程相互等待的案例(实现累加操作)

    Java线程面试题大全.docx

    5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. Java 中 CyclicBarrier 和 CountDownLatch 有什么不同? 8. Java 内存模型是什么? 9. Java 中的 volatile...

    多线程控制的三大安全类封装

    多线程控制的三大安全类:CountDownLatch、CyclicBarrier、Semaphore,这工具包将其封装,可以让初学者更容易学习以及让开发者更容易调用,不需要自己重新编写核心代码。具体事例在源码中。

Global site tag (gtag.js) - Google Analytics