ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**1. CyclicBarrier类(障栅)的功能** 当一个任务需要大量的线程进行计算时,把每个完成了自己任务的线程运行到障栅处,直到所有线程全部到达障栅,撤销障栅,把所有结果组合在一起,得到最终的结果。 <br/> **2. 实现细节** ```java // 1. 构造一个障栅,并给出参与的线程数 CyclicBarrier barrier = new CyclicBarrier(nthreads); // 2. 每个线程做一些工作,完成后调用await方法 public void run() { doWork(); barrier.await(); ... } ``` `barrier.await(100, TimeUnit.MILLISECONDS)`方法,超时或被中断,则抛出BrokenBarrierException异常,那些正在等待的线程会立即终止调用。 <br/> 下面的代码是一个可选的障栅动作,当所有的线程到达障栅后,barrierAction动作就会被执行,该动作可以收集那些单个线程的运行结果: ``` Runnable barrierAction = ...; CyclicBarrier barrier = new CyclicBarrier(nThreads, barrierAction); ``` CyclicBarrier障栅是一个循环障栅,是可以被重用的,这与CountDownLatch有很大不同。 <br/> Phaser类提供了更大的灵活性,可以改变不同阶段中参数线程的个数。