博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
同步工具类 -- CyclicBarrier
阅读量:7048 次
发布时间:2019-06-28

本文共 1595 字,大约阅读时间需要 5 分钟。

hot3.png

一、概述

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point),也可以称为 栅栏;与 CountDownLatch 类相似,但是它有一些特殊性让它成为更强大的类。

特点:栅栏用于等待其它线程,且会阻塞自己当前线程;

          所有线程必须同时到达栅栏位置后,才能继续执行;

CyclicBarrier 类有一个整数初始值,此值表示将在同一点同步的线程数量。当其中一个线程到达确定点,它会调用await() 方法来等待其他线程。当线程调用这个方法,CyclicBarrier阻塞线程进入休眠直到其他线程到达。当最后一个线程调用CyclicBarrier 类的await() 方法,它唤醒所有等待的线程并继续执行它们的任务。

二、应用场景

需要所有的子任务都完成时,才执行主任务,这个时候就可以选择使用CyclicBarrier。

三、实现

eg1:赛跑时,等待所有人都准备好时,才起跑

import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * 赛跑时,等待所有人都准备好时,才起跑 */public class Runner implements Runnable{	private CyclicBarrier cyclicBarrier;	private String name;		public Runner(CyclicBarrier cyclicBarrier, String name){		this.cyclicBarrier = cyclicBarrier;		this.name = name;	}		public void run() {	    System.out.println(name + "准备好了...");	    try {			cyclicBarrier.await();		} catch (InterruptedException e) {			e.printStackTrace();		} catch (BrokenBarrierException e) {			e.printStackTrace();		}	    System.out.println(name + "开跑...");	}}
import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class RunnerTest {	private static int count = 3;		public static void main(String[] args) {		CyclicBarrier cyclicBarrier = new CyclicBarrier(count);		ExecutorService service = 	Executors.newFixedThreadPool(count);		service.execute(new Runner(cyclicBarrier, "运动员-1"));		service.execute(new Runner(cyclicBarrier, "运动员-2"));		service.execute(new Runner(cyclicBarrier, "运动员-3"));				service.shutdown();	}}

 

转载于:https://my.oschina.net/u/1387400/blog/1518104

你可能感兴趣的文章
Spring MVC的路径匹配
查看>>
poj 2773 Happy 2006
查看>>
SRM585 div2
查看>>
Alert
查看>>
Java并发编程(六)volatile关键字解析
查看>>
Android深入四大组件(九)Content Provider的启动过程
查看>>
topcoder srm 698 div1 -3
查看>>
Vue入门(一)
查看>>
通用类 FileHelper 文本文件从磁盘读取、写入
查看>>
设计模式(三)——结构型模式
查看>>
黑客与画家
查看>>
ThreadPoolExecutor详解
查看>>
Jenkins权限配置失误后导致登录失败的解决办法
查看>>
eclipse设置酷炫的代码颜色风格
查看>>
stm32 低功耗模式 学习总结
查看>>
太空飞行计划问题
查看>>
TAT
查看>>
863D - Yet Another Array Queries Problem(思维)
查看>>
(基本不使用这种)springMVC注解
查看>>
New Concept English Two 26 70
查看>>