目录
一、CyclicBarrier概述
- 一、CyclicBarrier概述
- 二、CyclicBarrier代码示例
- CyclicBarrier的字面意思是可循环(Cyclic) 使用的屏障(barrier)。
- CyclicBarrier让一组线程到达一个屏障(也可以叫做同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。
- 线程进入屏障通过CyclicBarrier的await()方法。
模拟淘宝集齐5种福卡,坐等开奖案例
-
代码
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * @description: 模拟淘宝集齐5种福卡,坐等开奖案例 * @author: xz */ public class CyclicBarrierDemo { public static void main(String[] args) { collectCard(); } private static void collectCard(){ CyclicBarrier cyclicBarrier=new CyclicBarrier(5,()->{ System.out.println("五种卡片已集齐,坐等开奖"); }); for (int i = 1; i { System.out.println("线程"+Thread.currentThread().getName()+"\t 收集到第"+ temp +"种福卡"); try { cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } },String.valueOf(i)).start(); } } }
-
输出结果如下图: