CyclicBarrierDemo案例
CyclicBarrier
是 Java 并发包中的一个同步辅助工具,它的作用是在多个线程之间创建一个同步点,只有当所有线程都到达了这个同步点时,才能继续执行后续操作。下面是 CyclicBarrier
的一些关键作用:
协调多线程并发:
CyclicBarrier
可以让多个线程在指定的同步点处等待,直到所有线程都到达同步点后才继续执行后续操作。这种机制特别适合需要所有参与线程都完成某阶段任务后才能继续的场景。分阶段任务处理: 可以用于将任务分解为多个阶段,并规定所有线程必须在每个阶段结束后等待其他线程,以确保整个过程按照规定的顺序进行。
简化并发控制: 在某些复杂的并发场景中,
CyclicBarrier
可以帮助简化线程之间的控制和协调,避免手动编写复杂的同步逻辑。控制并发线程数: 可以限制并发执行的线程数量,当达到指定的线程数后,所有线程才开始同时执行。
提升性能: 在某些任务分解为多个子任务并行执行的场景下,
CyclicBarrier
可以保证所有子任务完成后再汇总结果,从而提升整体性能。
在使用 CyclicBarrier
时,需要先创建一个实例,并指定需要同步等待的线程数量。每个线程通过调用 await()
方法告知 CyclicBarrier
它已经到达了同步点,当所有线程都调用了 await()
方法后,CyclicBarrier
将会释放所有线程继续执行后续操作。
下面举一个例子,关于运动员到操场集合
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierDemo {
public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
CyclicBarrier cyclicBarrier = new CyclicBarrier(10,() -> { System.out.println("集合完 毕"); });
for (int i = 0; i < 10; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + " : 报到");
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}
}
感谢您的阅读!有任何疑问,欢迎联系我
714321862@qq.com