LMK*_*LMK 5 java concurrency multithreading
在这种情况下,CyclicBarrier 是否最合适。我想在 Stages 中并行运行 n 个线程(在 Stages 等待直到所有线程完成该 Stage)。
public class CyclicBarr {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() {
private int count =1;
@Override
public void run() {
System.out.println("Completed..!! "+(count++));
}
});
for (int i = 1; i <= 3; i++) {
Thread t = new Thread(new CuclicBarThread(barrier));
t.start();
}
}
}
Run Code Online (Sandbox Code Playgroud)
线程是
public class CuclicBarThread implements Runnable {
CyclicBarrier barrier;
public CuclicBarThread(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
try {
for (int i = 1; i < 5; i++) {
Thread.sleep(100);
}
System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 1 After Stage 1 Completed");
barrier.await();
for (int i = 1; i < 5; i++) {
Thread.sleep(1000);
}
System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 2 After Stage 2 Completed");
barrier.await();
for (int i = 1; i < 5; i++) {
Thread.sleep(100);
}
System.out.println(Thread.currentThread().getName() + " :: Waiting At Barrier 3 After Stage 3 Completed");
barrier.await();
System.out.println(Thread.currentThread().getName()+" :: $$$$$$$$ Completed $$$$$$$$");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,它是可重复使用的。这就是为什么它被称为“循环”。以下是其JavaDoc的引用:
一种同步辅助工具,允许一组线程全部等待彼此到达公共障碍点。CyclicBarriers 在涉及固定大小的线程组且偶尔必须相互等待的程序中非常有用。屏障被称为循环屏障,因为它可以在等待线程被释放后被重新使用。
你对 CyclicBarrier 的使用对我来说似乎很好。
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |