`

CyclicBarrier理解

阅读更多
package com.zhoubo.concurrent.barrier;

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

/**
 * barrier使得所有的线程执行到barrier相互等待,直到最后一个线程。barrierAction由最后一个线程执行到barrier时候执行
 * 
 * 其实各个线程只是执行到barrier处,线程内容不一定执行结束了。
 * 
 * 等到最后线程执行到barrier处,没有执行完成的内容继续执行。
 * @author Administrator
 *
 */
public class Solver {
	final int N;
	final float[][] data;
	final CyclicBarrier barrier;
	 boolean done=false;

	class Worker implements Runnable {
		int myRow;
		Worker(int row) {
			myRow = row;
		}
		public void run() {
//			while (!done()) {
				processRow(myRow);
				 System.out.println("waiting thread nubmer =" + barrier.getNumberWaiting());
				 System.out.println("barrier isBroken = " + barrier.isBroken());
				 System.out.println("parties = " + barrier.getParties());
				try {					
					barrier.await();	
					System.out.println("render row [" +myRow +"]");
				} catch (InterruptedException ex) {
					return;
				} catch (BrokenBarrierException ex) {
					return;
				}
//			}
		}
	}
	
	public void processRow(int row){
//		int temp = 3/(row-2);
		System.out.println("process row " + row);
	}
	
	public boolean done(){
		return done;
	}
	
	public void mergeRows(){
//	     System.out.println(barrier.getNumberWaiting());
		System.out.println("merge...");
//		barrier.reset();
	}
	
	public void waitUntilDone(){
		done = true;
	}

	public Solver(float[][] matrix) {
	     data = matrix;
	     N = matrix.length;
	     barrier = new CyclicBarrier(N 
	                                 ,new Runnable() {
	                                   public void run() { 
	                                     mergeRows(); 
	                                   }
	                                 }
	     );
	     for (int i = 0; i < N; ++i) 
	       new Thread(new Worker(i)).start();	
//	     waitUntilDone();
	   }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		float [][] matrix = {{1.0f,2.0f},{3.0f,4.0f},{1.0f,2.0f},{3.0f,4.0f}};
		Solver sl = new Solver(matrix);
	}

}
分享到:
评论

相关推荐

    CyclicBarrier的用法

    在Java多线程编程中,`CyclicBarrier`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。...理解和熟练使用`CyclicBarrier`对于优化多线程应用程序的性能和逻辑是非常关键的。

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

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

    CountDownLatch和CyclicBarrier用法实例大全

    学习和理解这两个工具,对于提升Java并发编程的能力至关重要,它们能帮助我们编写出更加高效、可维护的并发代码。通过阅读《java并发编程》中的实例,你可以更深入地掌握这些概念,并在实际工作中灵活运用。

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

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent...理解并熟练运用这两种工具,可以极大地提高多线程程序的效率和可维护性。

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    在Java并发编程中,CountDownLatch和CyclicBarrier都是用于协调多线程间同步的重要工具,它们可以帮助开发者在特定条件满足时启动或者...在实际开发中,理解它们的内部机制和应用场景对于编写高效的并发代码至关重要。

    java六大必须理解的问题

    理解线程安全、同步机制(synchronized关键字、Lock接口、volatile变量)以及并发工具类(如Semaphore、CountDownLatch、CyclicBarrier)是编写高效并发代码的基础。 3. **异常处理(Exception Handling)** Java...

    java面试题高级, 对底层高并发深入理解

    另外,要理解并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时锁)。 4. **并发容器**:ArrayList、LinkedList、HashMap、ConcurrentHashMap等容器在并发环境下的性能和安全...

    图灵Java高级互联网架构师第6期并发编程专题笔记.zip

    内容包括 01-并发编程之深入理解JMM&并发三大特性(一)-fox 02-并发编程之深入理解JMM&并发三...11-深入理解AQS之CyclicBarrier&ReentrantReadWriteLock详解-fox 12-深入理解AQS之ReentrantReadWriteLock详解-fox ...

    java六大必须理解的问题 文档

    理解线程的生命周期,同步机制如synchronized关键字、volatile变量、Lock接口以及并发工具类如Semaphore、CountDownLatch、CyclicBarrier,是编写高效并发代码的关键。此外,还要掌握Java内存模型(JMM)和线程安全...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在Java并发编程中,CountDownLatch、CyclicBarrier和Semaphore是三种重要的线程协作工具,它们都基于AbstractQueuedSynchronizer(AQS)框架来实现线程间的同步和协调。AQS是一个内置的锁和同步组件,它为构建高级...

    Java多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask详解

    在Java多线程编程中,CyclicBarrier、Callable、Future和FutureTask是四个重要的组件,它们各自提供了不同的功能,帮助开发者更好地管理和...理解并熟练运用这些组件,可以帮助开发者编写出更加高效和可控的并发程序。

    java面试题相关测试代码,用代码更好理解实现的原理.zip

    4. CountDownLatch、CyclicBarrier和Semaphore:线程同步工具类的应用。 四、IO与NIO 1. 流的概念:字节流、字符流,以及它们在读写操作中的应用。 2. NIO(New Input/Output):非阻塞I/O模型,通道与缓冲区的使用...

    并发学习并发学习并发学习并发学习并发学习

    其中,`ExecutorService`和`ThreadPoolExecutor`用于管理线程池,`Semaphore`用于控制并发访问的许可数量,`CountDownLatch`和`CyclicBarrier`用于协调线程间的同步。 4. **Fork/Join框架**:Fork/Join框架是JUC的...

    最全java sql oracle笔试面试题_各大公司_及笔试面试剖析

    - 多线程:掌握线程的创建、同步、通信,了解ThreadLocal和并发工具类如Semaphore、CyclicBarrier。 - 泛型:理解泛型的基本用法,类型擦除,通配符和边界。 - IO/NIO:掌握流的概念,理解 BIO、NIO 和 AIO 的...

    java面试题-应届生面试题-面试大全

    - **并发工具类**:熟悉ConcurrentHashMap、CountDownLatch、CyclicBarrier、Semaphore等并发工具的使用。 5. **IO流** - **流的分类**:了解字节流和字符流,理解节点流和处理流的区别。 - **文件操作**:熟悉...

    java工程师超级面试题

    3. 并发编程:掌握CountDownLatch、CyclicBarrier、Semaphore等并发工具类,理解原子操作和线程安全的类。 五、数据库相关 1. SQL优化:理解索引原理,掌握SQL查询优化技巧,如避免全表扫描、合理使用JOIN等。 2....

    面试题总结

    - 常见并发工具类:如Semaphore(信号量)、CountDownLatch(倒计时器)、CyclicBarrier(循环屏障)。 6. **Java高级特性** - 泛型通配符:理解,extends和super的用法。 - 注解:了解自定义注解的创建与使用,...

    Java面试题大全(综合了csdn上前辈上传的几份)

    12. **并发编程**:理解Java并发包中的工具类,如CountDownLatch、Semaphore、CyclicBarrier等,并能解决并发问题。 13. **反射机制**:理解反射在Java中的作用,能够动态获取类信息和实例化对象。 14. ** ...

    深入理解JAVA内存模型.pdf

    - 了解并使用并发工具类,如ConcurrentHashMap、CountDownLatch、CyclicBarrier等。 总之,深入理解Java内存模型有助于我们编写出更加健壮、高效的并发程序,避免线程安全问题,提高系统的性能和稳定性。在实际...

Global site tag (gtag.js) - Google Analytics