Java并发多线程编程——CyclicBarrier

x33g5p2x  于2022-01-07 转载在 Java  
字(0.9k)|赞(0)|评价(0)|浏览(457)

一、CyclicBarrier概述

  • CyclicBarrier的字面意思是可循环(Cyclic) 使用的屏障(barrier)。
  • CyclicBarrier让一组线程到达一个屏障(也可以叫做同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。
  • 线程进入屏障通过CyclicBarrier的await()方法。

二、CyclicBarrier代码示例

模拟淘宝集齐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 <=5; i++) {
            final int temp = i;
            new Thread(()->{
                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();
        }
    }
}
  • 输出结果如下图:

相关文章