深入理解JUC:第五章:CyclicBarrier循环栅栏

简介: 深入理解JUC:第五章:CyclicBarrier循环栅栏

理论:


它的作用就是会让所有线程都等待完成后才会继续下一步行动。

举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier

未使用循环栅栏的代码:

public class Demo {
    public static void main(String[] args) throws Exception{
        for (int i = 1; i <= 6; i++) {
            final int tempInt = i;
            new Thread(()->{
                System.out.println(tempInt+"朋友到了");
            },String.valueOf(i)).start();
        }
        System.out.println("朋友全部到了,才开始吃饭");
    }
}

控制台:

使用CyclicBarrier的代码:

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Demo {
    public static void main(String[] args) throws Exception{
        CyclicBarrier cyclicBarrier = new CyclicBarrier(6,()->{System.out.println("朋友全部到了,才开始吃饭");});
        for (int i = 1; i <= 6; i++) {
            final int tempInt = i;
            new Thread(()->{
                System.out.println(tempInt+"朋友到了");
                try {
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            },String.valueOf(i)).start();
        }
    }
}

控制台:

相关文章
|
6月前
|
Java Linux 调度
剑指JUC原理-7.线程状态与ReentrantLock(中)
剑指JUC原理-7.线程状态与ReentrantLock
56 0
|
2月前
|
Java
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
本文介绍了拼多多面试中的模拟拼团问题,通过使用 `CyclicBarrier` 实现了多人拼团成功后提交订单并支付的功能。与之前的 `CountDownLatch` 方法不同,`CyclicBarrier` 能够确保所有线程到达屏障点后继续执行,并且屏障可重复使用。文章详细解析了 `CyclicBarrier` 的核心原理及使用方法,并通过代码示例展示了其工作流程。最后,文章还提供了 `CyclicBarrier` 的源码分析,帮助读者深入理解其实现机制。
|
3月前
CyclicBarrier原理
文章主要介绍了CyclicBarrier的工作原理和使用场景。CyclicBarrier适用于需要多个线程同步到达某个点后再一起继续执行的情况,它通过ReentrantLock和Condition实现了高效的线程同步机制,适合用于需要循环使用屏障点的场景。
CyclicBarrier原理
|
6月前
|
并行计算 安全 Java
CyclicBarrier(循环屏障)源码解读与使用
CyclicBarrier(循环屏障)源码解读与使用
|
6月前
并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)
并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)
62 0
|
6月前
剑指JUC原理-7.线程状态与ReentrantLock(下)
剑指JUC原理-7.线程状态与ReentrantLock
52 0
|
6月前
剑指JUC原理-7.线程状态与ReentrantLock(上)
剑指JUC原理-7.线程状态与ReentrantLock
57 0
|
6月前
学习多线程之CyclicBarrier使用
学习多线程之CyclicBarrier使用
53 0
|
Java 开发工具 git
【Java多线程】如何正确使用循环栅栏CyclicBarrier
想象一个这样的场景,我们在打王者荣耀/英雄联盟的时候,都会有一个匹配机制,需要10个人都加载完成后,大家才能一起进入游戏,不然会出现大家进入游戏的时间不一致的情况,这个时候就可以使用CyclicBarrier来实现。
106 0
Java JUC并发包之CyclicBarrier循环栅栏
Java JUC并发包之CyclicBarrier循环栅栏
Java JUC并发包之CyclicBarrier循环栅栏