`
raymond.chen
  • 浏览: 1436842 次
  • 性别: 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编程通用范例

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

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

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

    JAVA语言与其程序设计范例

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

    Java范例开发大全源程序

    12. **泛型**:泛型提供了一种在编译时检查类型安全的方法,通过范例学习如何使用泛型类、泛型方法和通配符。 13. **注解(Annotation)**:注解用于元数据,学习如何创建自定义注解以及使用已有的标准注解。 14. **...

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

    并发编程则涉及到线程间的协作,例如使用ExecutorService管理线程池,或者使用CountDownLatch和CyclicBarrier进行同步控制。 此外,Java的IO/NIO系统也是开发中的重要部分。理解流的概念,学会使用FileInputStream...

    大漠多线程范例源码

    通过学习"大漠多线程范例源码",开发者不仅可以掌握多线程的基本概念,还能了解如何在实际项目中应用这些知识,解决并发问题,提升程序性能。每个子文件可能对应一个特定的多线程场景,通过分析和运行这些代码,...

    Java2范例入门与提高(源代码)

    还会涉及synchronized关键字、wait()、notify()和notifyAll()方法,以及高级的并发工具类如Semaphore和CyclicBarrier。 第七章:Java Swing图形用户界面 Swing是Java提供的一种用于构建桌面应用程序GUI的库。这一章...

    CountDownLatch练习

    **应用范例** ```java public class CountDownLatchExample { private static final int THREAD_COUNT = 10; private final CountDownLatch latch = new CountDownLatch(THREAD_COUNT); public void ...

    各种java源代码

    12. **并发编程**:并发工具类、并发集合、CountDownLatch、CyclicBarrier等。 13. **设计模式**:单例、工厂、观察者、装饰器等23种设计模式的实现。 通过这些实例,学习者不仅可以加深对Java语言的理解,还能学习...

    JAVAJAVA多线程教学演示系统论文

    此外,可能会探讨并发工具类,如Semaphore、CountDownLatch和CyclicBarrier等,以及他们的应用场景。 4. **线程安全与死锁**:论文会讨论线程安全问题,如数据竞争和活锁,并分析如何预防和解决这些问题。同时,会...

    三太子敖丙面试资料打包

    6. **多线程**: 线程的创建、同步机制(synchronized、Lock)、并发工具类(Semaphore、CountDownLatch、CyclicBarrier等)。 7. **IO/NIO**: 文件操作、流的分类、缓冲流、字符编码、NIO的非阻塞特性。 8. **网络...

Global site tag (gtag.js) - Google Analytics