`

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);
	}

}
分享到:
评论

相关推荐

    java多线程之CyclicBarrier的使用方法

    主要介绍了java多线程之CyclicBarrier的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    java并发编程专题(九)----(JUC)浅析CyclicBarrier

    主要介绍了java CyclicBarrier的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    【2018最新最详细】并发多线程教程

    【2018最新最详细】并发多线程教程,课程结构如下 ...25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题

    史上最全 Java 多线程面试题及答案.docx

    涵盖了多线程的用途、创建线程的方式、start() 方法和 run() 方法的区别、Runnable 接口和 Callable 接口的区别、CyclicBarrier 和 CountDownLatch 的区别等多个方面,旨在帮助读者更好地理解和掌握 Java 多线程编程...

    上海某大厂java面试真题与解析

    5、"利用CyclicBarrier和CountDownLatch解决并发协调难题,提升多线程程序的执行效率和可控性。#并发工具类 #Java并发编程" 6、"volatile与synchronized的巧妙运用,确保数据可见性,解决并发编程中的常见痛点。#...

    Java并发编程原理与实战

    理解自旋锁,死锁与重入锁.mp4 深入理解volatile原理与使用.mp4 JDK5提供的原子类的操作以及实现原理.mp4 Lock接口认识与使用.mp4 手动实现一个可重入锁.mp4 AbstractQueuedSynchronizer(AQS)详解.mp4 使用AQS重写...

    Java并发编程基础.pdf

    线程与线程状态:理解Java中线程的基本概念,包括线程的创建、启动、暂停、恢复和终止。熟悉线程的生命周期及其不同状态,如新建、就绪、运行、阻塞和死亡。 线程同步与通信:掌握Java中的同步机制,如synchronized...

    龙果 java并发编程原理实战

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    Java 并发编程原理与实战视频

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    龙果java并发编程完整视频

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    java并发编程

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段20讲 CyclicBarrier vs CountDownLatch_.mp4  高并发编程第三阶段21讲 Exchanger工具的使用以及常见问题分析-上_.mp4  高并发编程第三阶段22讲 Exchanger工具的使用以及常见问题分析-下_.mp4 ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】java多态的理解 13 【基础】transient关键字 15 【基础】访问修饰符区别 15 【基础】java基本数据类型(四类八种) 15 Java自动类型转换 16 数据类型自动提升(注意以下讨论的是二元操作符) 16 【基础】...

    javaSE代码实例

    15.5 理解内部类 339 15.6 内部接口 340 15.6.1 定义在类中的内部接口 340 15.6.2 定义在接口中的内部接口 341 15.7 小结 342 第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 ...

Global site tag (gtag.js) - Google Analytics