深入理解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();
        }
    }
}

控制台:

相关文章
|
7天前
CyclicBarrier原理
文章主要介绍了CyclicBarrier的工作原理和使用场景。CyclicBarrier适用于需要多个线程同步到达某个点后再一起继续执行的情况,它通过ReentrantLock和Condition实现了高效的线程同步机制,适合用于需要循环使用屏障点的场景。
CyclicBarrier原理
|
3月前
|
并行计算 安全 Java
CyclicBarrier(循环屏障)源码解读与使用
CyclicBarrier(循环屏障)源码解读与使用
|
3月前
|
安全 Java 程序员
java线程面试题及答案线程安全线程锁线程
java线程面试题及答案线程安全线程锁线程
84 0
|
3月前
学习多线程之CyclicBarrier使用
学习多线程之CyclicBarrier使用
43 0
|
11月前
|
Java 开发工具 git
【Java多线程】如何正确使用循环栅栏CyclicBarrier
想象一个这样的场景,我们在打王者荣耀/英雄联盟的时候,都会有一个匹配机制,需要10个人都加载完成后,大家才能一起进入游戏,不然会出现大家进入游戏的时间不一致的情况,这个时候就可以使用CyclicBarrier来实现。
Java JUC并发包之CyclicBarrier循环栅栏
Java JUC并发包之CyclicBarrier循环栅栏
Java JUC并发包之CyclicBarrier循环栅栏
|
测试技术
CyclicBarrier原理剖析
CyclicBarrier原理剖析
133 0
|
Java API
【JUC】循环屏障CyclicBarrier详解
【JUC】循环屏障CyclicBarrier详解
120 0
【JUC】循环屏障CyclicBarrier详解
|
存储 安全 容器
【多线程】阻塞线程| 一图看懂ArrayBlockingQueue源码
是一个数组实现的环形队列,经常会使用并发容器用于存储多线程间的共享数据,这样不仅可以保证线程安全,还可以简化各个线程操作
|
关系型数据库 MySQL Java
【Semaphore、ReentrantLock、CountDownLatch、Cyclicbarrier、ReadWriteLock】多线程交替执行、顺序执行、同时执行、读写分离执行、生产者消费者
【Semaphore、ReentrantLock、CountDownLatch、Cyclicbarrier、ReadWriteLock】多线程交替执行、顺序执行、同时执行、读写分离执行、生产者消费者
100 0
【Semaphore、ReentrantLock、CountDownLatch、Cyclicbarrier、ReadWriteLock】多线程交替执行、顺序执行、同时执行、读写分离执行、生产者消费者