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`是一个非常重要的同步工具类,它允许一组线程等待其他线程到达某个屏障点后再一起继续执行。...理解和熟练使用`CyclicBarrier`对于优化多线程应用程序的性能和逻辑是非常关键的。
在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...
学习和理解这两个工具,对于提升Java并发编程的能力至关重要,它们能帮助我们编写出更加高效、可维护的并发代码。通过阅读《java并发编程》中的实例,你可以更深入地掌握这些概念,并在实际工作中灵活运用。
在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent...理解并熟练运用这两种工具,可以极大地提高多线程程序的效率和可维护性。
在Java并发编程中,CountDownLatch和CyclicBarrier都是用于协调多线程间同步的重要工具,它们可以帮助开发者在特定条件满足时启动或者...在实际开发中,理解它们的内部机制和应用场景对于编写高效的并发代码至关重要。
理解线程安全、同步机制(synchronized关键字、Lock接口、volatile变量)以及并发工具类(如Semaphore、CountDownLatch、CyclicBarrier)是编写高效并发代码的基础。 3. **异常处理(Exception Handling)** Java...
另外,要理解并发工具类,如Semaphore(信号量)、CyclicBarrier(循环屏障)和CountDownLatch(倒计时锁)。 4. **并发容器**:ArrayList、LinkedList、HashMap、ConcurrentHashMap等容器在并发环境下的性能和安全...
内容包括 01-并发编程之深入理解JMM&并发三大特性(一)-fox 02-并发编程之深入理解JMM&并发三...11-深入理解AQS之CyclicBarrier&ReentrantReadWriteLock详解-fox 12-深入理解AQS之ReentrantReadWriteLock详解-fox ...
理解线程的生命周期,同步机制如synchronized关键字、volatile变量、Lock接口以及并发工具类如Semaphore、CountDownLatch、CyclicBarrier,是编写高效并发代码的关键。此外,还要掌握Java内存模型(JMM)和线程安全...
在Java并发编程中,CountDownLatch、CyclicBarrier和Semaphore是三种重要的线程协作工具,它们都基于AbstractQueuedSynchronizer(AQS)框架来实现线程间的同步和协调。AQS是一个内置的锁和同步组件,它为构建高级...
在Java多线程编程中,CyclicBarrier、Callable、Future和FutureTask是四个重要的组件,它们各自提供了不同的功能,帮助开发者更好地管理和...理解并熟练运用这些组件,可以帮助开发者编写出更加高效和可控的并发程序。
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的...
- 多线程:掌握线程的创建、同步、通信,了解ThreadLocal和并发工具类如Semaphore、CyclicBarrier。 - 泛型:理解泛型的基本用法,类型擦除,通配符和边界。 - IO/NIO:掌握流的概念,理解 BIO、NIO 和 AIO 的...
- **并发工具类**:熟悉ConcurrentHashMap、CountDownLatch、CyclicBarrier、Semaphore等并发工具的使用。 5. **IO流** - **流的分类**:了解字节流和字符流,理解节点流和处理流的区别。 - **文件操作**:熟悉...
3. 并发编程:掌握CountDownLatch、CyclicBarrier、Semaphore等并发工具类,理解原子操作和线程安全的类。 五、数据库相关 1. SQL优化:理解索引原理,掌握SQL查询优化技巧,如避免全表扫描、合理使用JOIN等。 2....
- 常见并发工具类:如Semaphore(信号量)、CountDownLatch(倒计时器)、CyclicBarrier(循环屏障)。 6. **Java高级特性** - 泛型通配符:理解,extends和super的用法。 - 注解:了解自定义注解的创建与使用,...
12. **并发编程**:理解Java并发包中的工具类,如CountDownLatch、Semaphore、CyclicBarrier等,并能解决并发问题。 13. **反射机制**:理解反射在Java中的作用,能够动态获取类信息和实例化对象。 14. ** ...
- 了解并使用并发工具类,如ConcurrentHashMap、CountDownLatch、CyclicBarrier等。 总之,深入理解Java内存模型有助于我们编写出更加健壮、高效的并发程序,避免线程安全问题,提高系统的性能和稳定性。在实际...