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

CyclicBarrier类的应用范例

阅读更多

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

 

CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。

 

范例源码:

package com.jeyo.java5;

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

public class Test3 {
	//一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)
	final CyclicBarrier barrier;
	
	//线程数
	int count;
	
	class Worker implements Runnable{
		int index;
		Worker(int index){
			this.index = index;
		}
		public void run() {
			System.out.println("第" + index + "个线程休眠"+(2 * index)+"秒!");
			try {
				Thread.sleep(2000 * index);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("第" + index + "个线程结束休眠!");
			
			try {
				//等待其它线程都处理完毕后,再继续以下代码的执行
				barrier.await();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (BrokenBarrierException e) {
				e.printStackTrace();
			}
			
			System.out.println(index);
		}
	}
	
	public Test3(int count){
		this.count = count;
		
		//公共屏障点 等待到5个线程后,执行相应的barrierAction
		barrier = new CyclicBarrier(count, new Runnable() {
			public void run(){
				System.out.println("全部线程已执行完毕!");
			}
		});
		
		for(int i=1;i<=this.count;i++){
			new Thread(new Worker(i)).start();
		}
	}
	
	public static void main(String[] args) {
		new Test3(5);
	}
}

 

 

  • 大小: 29.6 KB
2
0
分享到:
评论

相关推荐

    JAVA CyclicBarrier类详解.docx

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

    Java中的CyclicBarrier类最全讲义

    1.2 CyclicBarrier概述 CyclicBarrier的基本用法 2.1 创建CyclicBarrier对象 2.2 await()方法 控制线程协作数量 3.1 场景介绍 3.2 使用CyclicBarrier控制线程协作 循环使用CyclicBarrier 4.1 场景介绍 4.2 使用...

    CyclicBarrier的使用以及注意事项

    CyclicBarrier的使用以及注意事项

    Java并发系列之CyclicBarrier源码分析

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

    JAVA编程通用范例

    通用范例可能会包含线程同步、锁机制(如synchronized关键字、ReentrantLock等)、并发工具类(如ExecutorService、CountDownLatch、CyclicBarrier)的示例。 5. **IO流**:Java的IO流系统用于读写文件和网络数据。...

    java线程并发cyclicbarrier类使用示例

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

    CountDownLatch和CyclicBarrier用法实例大全

    《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法

    CyclicBarrier用法.docx

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

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

    CyclicBarrier的实现非常简单,jdk中CyclicBarrier类有一个常用的构造方法:CyclicBarrier(int parties);两个常用的方法:await()和reset()。其中parties是一个参与者数量的初始化数字,比如初始化的数字是4,当四...

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

    CyclicBarrier类还有一个构造方法CyclicBarrier(int parties, Runnable barrierAction),这里的parties与上一个构造方法的解释是一样的,这里的第二个入参(Runnable barrierAction)是一个实现Runnable接口的类的对象...

    CyclicBarrier的用法

    NULL 博文链接:https://hubowei1.iteye.com/blog/2312471

    CyclicBarrier,reentrantlock,condition模拟抢票

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

    JAVA编程模式与范例_高级应用开发

    - **并发工具类**:如Semaphore、CountDownLatch、CyclicBarrier、Exchanger等。 - **并发集合**:如ConcurrentHashMap、CopyOnWriteArrayList等。 - **线程池**:ExecutorService、ThreadPoolExecutor和...

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

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

    Java并发实例之CyclicBarrier的使用

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

    Java并发编程相关技术使用案例

    1、本资源包含并发编程基础知识的使用案例,包括:线程创建、Synchronized和Reentrantlock锁的使用、线程安全问题演示、Condition的应用、CountDownLatch的应用、Cyclicbarrier的应用、Semaphore的应用、线程池的...

    Java中CyclicBarrier的用法分析

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

    java多线程之CyclicBarrier的使用方法

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

    JAVA语言与其程序设计范例

    此外,Java还提供了并发工具类,如ExecutorService、Semaphore和CyclicBarrier,以更高效地管理和协调并发任务。 Java标准库(Java API)包含了大量用于各种用途的类和接口,如集合、网络、I/O、日期时间、数学计算...

    Java编程模式与范例基础开发技巧

    Java提供了丰富的并发工具类,如ExecutorService、Semaphore、CyclicBarrier等,以及synchronized关键字和java.util.concurrent包下的原子类,帮助开发者编写高效的多线程程序。 9. **反射**: 反射允许程序在...

Global site tag (gtag.js) - Google Analytics