//Listing 6-2. Using a Cyclic Barrier to Decompose a Task into Subtasks
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier; public class T {
public static void main(String[] args) {
float[][] matrix = new float[][];
int counter = ;
for (int row = ; row < matrix.length; row++)
for (int col = ; col < matrix[].length; col++)
matrix[row][col] = counter++;
dump(matrix);
System.out.println();
Solver solver = new Solver(matrix);
System.out.println();
dump(matrix);
} static void dump(float[][] matrix) {
for (int row = ; row < matrix.length; row++) {
for (int col = ; col < matrix[].length; col++)
System.out.print(matrix[row][col] + " ");
System.out.println();
}
}
} class Solver {
final int N;
final float[][] data;
final CyclicBarrier barrier; class Worker implements Runnable {
int myRow;
boolean done = false; Worker(int row) {
myRow = row;
} boolean done() {
return done;
} void processRow(int myRow) {
System.out.println("Processing row: " + myRow);
for (int i = ; i < N; i++)
data[myRow][i] *= ;
done = true;
} @Override
public void run() {
while (!done()) {
processRow(myRow);
try {
barrier.await();
} catch (InterruptedException ie) {
return;
} catch (BrokenBarrierException bbe) {
return;
}
}
}
} public Solver(float[][] matrix) {
data = matrix;
N = matrix.length;
barrier = new CyclicBarrier(N, new Runnable() {
@Override
public void run() {
mergeRows();
}
});
for (int i = ; i < N; ++i)
new Thread(new Worker(i)).start();
waitUntilDone();
} void mergeRows() {
System.out.println("merging");
synchronized ("abc") {
"abc".notify();
}
} void waitUntilDone() {
synchronized ("abc") {
try {
System.out.println("main thread waiting");
"abc".wait();
System.out.println("main thread notified");
} catch (InterruptedException ie) {
System.out.println("main thread interrupted");
}
}
}
}

java CyclicBarrier 2的更多相关文章

  1. java CyclicBarrier

    import java.io.IOException; import java.util.Random; import java.util.concurrent.BrokenBarrierExcept ...

  2. java CyclicBarrier的介绍和使用

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

  3. java CyclicBarrier以及和CountDownLatch的区别

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的 ...

  4. 同步机制之--java CyclicBarrier 循环栅栏

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

  5. java CyclicBarrier同步屏障

    CyclicBarrier的字面意思是可循环使用的屏障,它的主要作用是,让一组线程到达一个屏障时被阻塞,知道最后一个线程到达屏障时,屏障才会打开,所有被屏障拦截的线程才会继续运行. 1.简介: Cyc ...

  6. JAVA CyclicBarrier类详解

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

  7. java CyclicBarrier和wait/notifyAll

    1 CyclicBarrier 多个进程做自己的事情,然后先做完的就等待在CyclicBarrier上,然后最后一个做完的线程到来时会冲破CyclicBarrier,然后执行CyclicBarrier ...

  8. java并发之CountDownLatch、Semaphore和CyclicBarrier

    JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch Java之CountDownLatc ...

  9. Java核心-多线程-并发控制器-CyclicBarrier同步屏障

    1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...

随机推荐

  1. MATLAB学习笔记(一)——入门与操作

    (一)简单操作 一.命令行操作 简单的说就跟C语言(更简单来说,就跟手写的一样). 二.变量.数值与表达式 1.变量 (1)命名规则: ①变量名必须以字母开头: ②变量名可以由字母.数字和下画线混合组 ...

  2. jdbc、事务(Transaction)、批处理 回顾

    论文写的头疼,回顾一下jdbc,换换脑子 传统的写法: 1.加载驱动类 class.forname("jdbc类的包结构"); 2.获得连接 Connection conn=Dri ...

  3. loadrunner录制脚本出现urs.asmx解决方法:

    在loadrunner录制过程中可能出现如下脚本: 解决方法: 解决办法:打开IE9的Internet选项-->高级,把设置下面安全中“启用SmartScreen筛选器”不选中,IE默认是选中的 ...

  4. Playmaker Input篇教程之PlayMaker菜单概述

    Playmaker Input篇教程之PlayMaker菜单概述 Playmaker InputPlayMaker菜单概述 Playmaker插件被导入游戏项目以后,会自动为Unity编辑器添加一个名 ...

  5. python开发_mysqldb安装

    在python的API上面,看到了MySQLdb,即python可以操作mysql数据库 接下来,我就把我这两天的工作给大伙絮叨絮叨: 准备条件: 1.MySQL-python-1.2.4b4.win ...

  6. Bitset[HDU2051]

    Bitset Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. ognl el表达式 property

    <s:iterator value="list" status="statu" var="alarminfo"> <tr& ...

  8. 数据库操作sql【转】

    Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表 问题:1. ...

  9. cocos2d 遍历CCAarray

    cocos2d 遍历CCAarray CCARRAY_FOREACH(children_, node){ }

  10. 【BZOJ】2648: SJY摆棋子 & 2716: [Violet 3]天使玩偶(kdtree)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2716 http://www.lydsy.com/JudgeOnline/problem.php?id ...