Java - CyclicBarrier

4人阅读 评论(0) 收藏 举报
分类:
package Chapter02;

import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;

/*
 * CyclicBarrier:
 * 1. 同步屏障
 * 2. 计数器为0
 * 3. await时,计数器加1
 * 4. 具有屏障重置性
 */
public class _02_Run {
	
	static void prepareClimb(CyclicBarrier cBarrier, CountDownLatch cdLatch,
			String id) {
		try {
			System.out.println("同学 "+ id+ " 接到爬山计划通知.");
			cBarrier.await();
			
			System.out.println("同学 "+ id+ " 正在赶往集合地.");
			cBarrier.await(); //屏障重置性
			
			System.out.println("同学 "+ id+ " 到达目的地.");
			cBarrier.await();
			
			cdLatch.countDown();
		} catch (Exception e) { }
	}
	
	public static void main(String[] args) {
		CountDownLatch cdLatch = new CountDownLatch(5);
		CyclicBarrier cBarrier = new CyclicBarrier(5, new Runnable() {
			@Override
			public void run() {
				System.out.println("---------------------");
			}
		});
		
		Arrays.asList("a", "b", "c", "d", "e").forEach(id -> {
			// lambda表达式 -> 函数式接口,来创建实例
			new Thread(() -> {
				prepareClimb(cBarrier, cdLatch, id);
			}).start();
		});
		
		try {
			cdLatch.await();
		} catch (InterruptedException e) { }
		System.out.println("所有同学都已到达,开始进行爬山计划.");
	}
}

同学 a 接到爬山计划通知.
同学 e 接到爬山计划通知.
同学 c 接到爬山计划通知.
同学 b 接到爬山计划通知.
同学 d 接到爬山计划通知.
---------------------
同学 d 正在赶往集合地.
同学 a 正在赶往集合地.
同学 b 正在赶往集合地.
同学 c 正在赶往集合地.
同学 e 正在赶往集合地.
---------------------
同学 e 到达目的地.
同学 d 到达目的地.
同学 a 到达目的地.
同学 b 到达目的地.
同学 c 到达目的地.
---------------------
所有同学都已到达,开始进行爬山计划.

查看评论

Java并发编程之——CyclicBarrier的使用

首先看一下官方关于CyclicBarrier的简介: /** * A synchronization aid that allows a set of threads to all wait for...
  • liuyi1207164339
  • liuyi1207164339
  • 2016-06-09 16:33:38
  • 1673

【JAVA】java中CyclicBarrier的用法,实例讲解

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarri...
  • chiweitree
  • chiweitree
  • 2015-07-30 16:06:35
  • 1449

Java并发工具类CountDownLatch和CyclicBarrier

1.CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作,其构造函数接收一个int型的参数作为计数器,若想等待N个点完成,就传人N。此处的N个点,可指N个线程...
  • darrensun2014
  • darrensun2014
  • 2016-04-03 20:59:42
  • 460

Java-CyclicBarrier的简单例子

内容:一个主任务等待两个子任务,通过CyclicBarrier的await()实现,此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。 public cla...
  • u011345136
  • u011345136
  • 2015-07-11 15:57:39
  • 1004

CountDownLatch和CyclicBarrier的应用场景

jdk1.5之后,java的concurrent包提供了一些并发工具类,比如CountDownLatch和CyclicBarrier,这里只讲它们的应用场景,暂不作原理剖析。 CountDownLa...
  • suibo0912hf
  • suibo0912hf
  • 2015-09-15 09:07:49
  • 1219

Java多线程/并发23、循环屏障CyclicBarrier

CyclicBarrier 直译叫循环屏障或循环分界点。让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。打个比方,F1大奖...
  • soonfly
  • soonfly
  • 2017-05-04 21:03:28
  • 692

Java多线程之CyclicBarrier、Future和FutureTask

原文出处: http://www.cnblogs.com/xrq730/p/4872722.html1 CyclicBarrier接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier...
  • antony9118
  • antony9118
  • 2017-04-24 17:39:05
  • 314

java并发之CyclicBarrier(障碍器)

CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,...
  • gongpulin
  • gongpulin
  • 2016-04-24 22:53:43
  • 1587

Java并发编程之栅栏(CyclicBarrier)详解

栅栏类似闭锁,但是它们是有区别的. 闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才...
  • csujiangyu
  • csujiangyu
  • 2015-03-17 10:25:41
  • 4971

java并发编程中CountDownLatch和CyclicBarrier的使用

java并发编程中CountDownLatch和CyclicBarrier的使用  在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决?如果是一个线程等待一个线...
  • hbzyaxiu520
  • hbzyaxiu520
  • 2011-02-14 12:47:00
  • 6500
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 16万+
    积分: 4146
    排名: 9256
    博客专栏
    最新评论