java CyclicBarrier 2
//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的更多相关文章
- java CyclicBarrier
import java.io.IOException; import java.util.Random; import java.util.concurrent.BrokenBarrierExcept ...
- java CyclicBarrier的介绍和使用
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarri ...
- java CyclicBarrier以及和CountDownLatch的区别
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的 ...
- 同步机制之--java CyclicBarrier 循环栅栏
CyclicBarrier介绍一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待 ...
- java CyclicBarrier同步屏障
CyclicBarrier的字面意思是可循环使用的屏障,它的主要作用是,让一组线程到达一个屏障时被阻塞,知道最后一个线程到达屏障时,屏障才会打开,所有被屏障拦截的线程才会继续运行. 1.简介: Cyc ...
- JAVA CyclicBarrier类详解
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrie ...
- java CyclicBarrier和wait/notifyAll
1 CyclicBarrier 多个进程做自己的事情,然后先做完的就等待在CyclicBarrier上,然后最后一个做完的线程到来时会冲破CyclicBarrier,然后执行CyclicBarrier ...
- java并发之CountDownLatch、Semaphore和CyclicBarrier
JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch Java之CountDownLatc ...
- Java核心-多线程-并发控制器-CyclicBarrier同步屏障
1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...
随机推荐
- android自动更新程序,安装完以后就什么都没有了,没有出现安装成功的界面的问题
转载自: http://blog.csdn.net/lovexieyuan520/article/details/9250099 在android软件开发中,总是需要更新版本,所以当有新版本开发的时候 ...
- HDU 4343 贪心
D - Interval queryTime Limit: 1.5 Sec Memory Limit: 256 MB Description This is a very simple questio ...
- SQLServer备份脚本
企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业名称--"步骤"项--新建--"步骤名"中输入 ...
- SQL2005备份数据库到远程服务器中
--打开高级设置EXEC sp_configure 'show advanced options', 1RECONFIGURE--打开xp_cmdshell扩展存储过程EXEC sp_configur ...
- map与mapPartitions
区别在于sc.map是将RDD下的所有行数据统计处理.而sc.mapPartitions是按RDD分区进行数据统计处理. 测试一下: val data = sc.parallelize(1 to 6, ...
- 二分查找法 java
前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ...
- JDK QUEUE队列
Java Queue基础 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被 ...
- http://blog.csdn.net/congcong68/article/details/39252897
http://blog.csdn.net/congcong68/article/details/39252897
- COJ979 WZJ的数据结构(负二十一)
试题描述 请你实现一个数据结构,完成这样的功能: 给你一个N个点的图,初始状态无边. 每次加入一条双向边(u,v,w),若加入后没有构成一棵生成树,输出“Not Yet”,否则输出当前最小生成树的权值 ...
- Graph database_neo4j 底层存储结构分析(8)
3.8 示例1:neo4j_exam 下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式. 3.8.1 neo4j ...