【JAVA】CyclicBarrier源码解析以及示例
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierExample {
public static void main(String[] args) {
// 创建CyclicBarrier对象,并设置等待点数为5
CyclicBarrier barrier = new CyclicBarrier(5);
// 创建5个线程,每个线程在完成自己的任务后,都会在barrier处等待
for (int i = 0; i < 5; i++) {
final int threadId = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
// 模拟任务执行
Thread.sleep((long) (Math.random() * 10000));
System.out.println("线程" + threadId + "完成任务,等待其他线程...");
// 在CyclicBarrier处等待其他线程
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("所有线程都到达barrier,继续执行后续任务...");
}
});
t.start();
}
}
}
这段代码创建了一个CyclicBarrier实例,并在5个独立的线程中运行。每个线程在完成自己的任务后,都会在CyclicBarrier处等待,直到所有线程都到达barrier为止,然后继续执行后续任务。这展示了CyclicBarrier的一个常见用例,即当一组线程需要在一个固定点同步时,CyclicBarrier是一个非常有用的工具。
评论已关闭