`
jay_kid
  • 浏览: 65048 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

My study on CyclicBarrier

阅读更多

package com.jaykid.test.java.thread;

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

public class MyCyclicBarrierTest {

	private static CyclicBarrier barrier;

	public static void main(String[] args) {
		barrier = new CyclicBarrier(4, new Runnable() {

			@Override
			public void run() {
				System.out.println(Thread.currentThread().getId() + ": I'm the latest! Wooow~~~"); 
			}
			
		});
		new TravelingGroup("Walk", 5000L).start();
		new TravelingGroup("Bike", 3000L).start();
		new TravelingGroup("Taxi", 1000L).start();
		new TravelingGroup("Plain", 500L).start();
	}

	/**
	 * Inner class to simulate a traveling group
	 *
	 */
	private static class TravelingGroup extends Thread {

		private final long timeOnTheWay;

		private final String groupName;

		public TravelingGroup(String groupName, long timeOnTheWay) {
			this.groupName = groupName;
			this.timeOnTheWay = timeOnTheWay;
		}

		@Override
		public void run() {
			try {
				movingVeryHard();
				trace("Reach Guangzhou! So many delicious food to eat!");
				barrier.await();

				movingVeryHard();
				trace("Reach ShenZhen! Where is Hawking?");
				barrier.await();

				movingVeryHard();
				trace("Reach ShangHai! The traffic is crazy!");
				barrier.await();

				movingVeryHard();
				trace("Reach BeiJing! Snowing... very cold !!Bye Bye!");
			} catch (InterruptedException e) {
				trace("catch InterruptedException");
			} catch (BrokenBarrierException e) {
				trace("catch BrokenBarrierException");
			}
		}

		public void trace(String trace) {
			System.out.println(groupName + "[" + Thread.currentThread().getId() + "]" + " : " + trace);
		}

		private void movingVeryHard() throws InterruptedException {	
			Thread.sleep(timeOnTheWay);
		}

	}

}

 

1. What is CyclicBarrier

 

A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fixed sized party of threads that must occasionally wait for each other. The barrier is called cyclic because it can be re-used after the waiting threads are released. 

 

2. Code example

 

Three Group of people are travlling, they start from HK, then pass GuangZhou, ShenZhen, ShangHai, finally reach Beijing. they set a rule, that they will set out to next destination only when all the member reach current location. Let's use Java to describe this exciting event.

 

3. Can I execute some logic when the barrier point reach, which thread will execute that ?

 

A CyclicBarrier supports an optional Runnable command that is run once per barrier point, after the last thread in the party arrives, but before any threads are released. The last thread which call await() will execute that runnable.

 

4. What kind of Exception will it throw

 

The CyclicBarrier uses an all-or-none breakage model for failed synchronization attempts: If a thread leaves a barrier point prematurely because of interruption, failure, or timeout, all other threads waiting at that barrier point will also leave abnormally via BrokenBarrierException (or InterruptedException if they too were interrupted at about the same time). 

 

5. How the CyclicBarrier was implemented?

* How the thrad keep blck?

* How the last thread invoke all the waiting thread?

* How it execute the runnable?

分享到:
评论

相关推荐

    CyclicBarrier的用法

    在Java多线程编程中,`CyclicBarrier`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。这个屏障点就是我们所说的“循环栅栏”,顾名思义,它就像一个旋转门,所有线程必须...

    CyclicBarrier的使用以及注意事项

    CyclicBarrier的使用以及注意事项

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    Java并发系列之CyclicBarrier源码分析

    Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列中的一种同步工具类,用于实现一组线程相互等待。当所有线程都到达某个屏障点后,再进行后续的操作。下面是对CyclicBarrier源码的详细分析。 ...

    CyclicBarrier用法.docx

    CyclicBarrier是Java并发编程中一个非常重要的工具类,它属于java.util.concurrent包,主要用于多线程间的协作,尤其在需要多个线程等待彼此完成特定任务后才能继续执行的场景中发挥着关键作用。CyclicBarrier的名字...

    CyclicBarrier,reentrantlock,condition模拟抢票

    用CyclicBarrier,reentrantlock,condition来完成同时购买,同步购买的功能 JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票) http://blog.csdn.net/crazyzxljing0621/article/details/77891620

    Java并发实例之CyclicBarrier的使用

    Java并发实例之CyclicBarrier的使用 CyclicBarrier是Java中的一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier...

    Java中的CyclicBarrier类最全讲义

    # Java中的CyclicBarrier类最全讲义 ## 1. 简介 ### 1.1 并发编程与线程协作 在现代软件开发中,特别是高性能计算领域,利用多核处理器的能力变得至关重要。为了充分利用这些硬件资源,程序员们开始广泛采用并发...

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    JAVA CyclicBarrier类详解.docx

    《JAVA CyclicBarrier类详解》 CyclicBarrier是Java并发包(java.util.concurrent)中一个重要的同步辅助类,它的主要作用在于协调多个线程之间的协作,使得这些线程能够一起到达一个公共的“集结点”(称为屏障点...

    Java并发编程(CyclicBarrier)实例详解

    Java并发编程(CyclicBarrier)实例详解 Java并发编程(CyclicBarrier)实例详解主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    28 人齐了,一起行动—CyclicBarrier详解.pdf

    CyclicBarrier 是 Java 并发库中的一种同步工具类,用于协调多个线程之间的协作,使得它们能够一起开始某个计算任务或操作。它的名称“CyclicBarrier”来源于它具有可重用的特点,即当所有等待的线程都达到指定的...

    CyclicBarrier(处理方案示例).md

    CyclicBarrier(处理方案示例).md

    Java中CyclicBarrier的用法分析

    Java中的`CyclicBarrier`是一个同步辅助类,它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点。这个屏障点就像一个交通信号灯,只有当所有的车辆(线程)都到达了交叉口,信号灯才会变为绿灯,允许它们...

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

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    java多线程之CyclicBarrier的使用方法

    Java多线程之CyclicBarrier的使用方法 Java多线程之CyclicBarrier的使用方法是Java多线程编程中的一种同步机制,用于实现多个线程之间的同步协作。CyclicBarrier是Java 5中引入的一种同步机制,用于让多个线程等待...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    ### CountDownLatch 和 CyclicBarrier 的运用(含AQS详解) #### CountDownLatch **定义与特点:** CountDownLatch 是 Java 并发包中的一个重要组件,它主要用于解决“一个或多个线程等待其他线程完成任务”的问题。...

Global site tag (gtag.js) - Google Analytics