CountDownLatch、CyclicBarrier 使用区别
主要区别
- CountDownLatch:所有子线程完成后,再执行主线程
- CyclicBarrier: 所有子线程就绪后,再执行子线程
CountDownLatch
所有子线程完成后,再执行主线程

多线程 ThreadPoolTaskExecutor 应用
SpringBoot 下载文件
CyclicBarrier
有若干个线程,比如说有五个线程,需要它们都到达了某一个点之后才能开始一起执行,也就是说假如其中只有四个线程到达了这个点,还差一个线程没到达,此时这四个线程都会进入等待状态,直到第五个线程也到达了这个点之后,这五个线程才开始一起进行执行状态
所有子线程就绪后,再执行子线程

所有子线程都已经到达屏障之后,此时屏障就会消失,所有子线程继续执行,若存子线程尚未到达屏障,其他到达了屏障的线程都会进行等待
CyclicBarrier对于涉及到固定大小的线程是非常有用的,线程们必须相互等待。该屏障称之为循环屏障,是因为当等待屏障的线程被释放之后,该屏障能循环使用
package com.concurrency2;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
public class MyTest1 {
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
        for(int i = 0;i < 3;i ++) {
            new Thread(() -> {
                try {
                    Thread.sleep((long)(Math.random() * 2000));
                    int randomInt = new Random().nextInt(500);
                    System.out.println("hello " + randomInt);
                    cyclicBarrier.await();
                    System.out.println("world " + randomInt);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
输出
hello 30
hello 471
hello 343
world 343
world 471
world 30
重要成员变量
// 可以理解为初始化时 需要阻塞的任务个数
private final int parties;
// 剩余需要等待的任务个数,初始值为parties,直到为0时依次唤醒所有被阻塞的任务线程。
private int count;
// 每次对“栅栏”的主要成员变量进行变更操作,都应该加锁
private final ReentrantLock lock = new ReentrantLock();
// 用于阻塞和唤醒任务线程
private final Condition trip = lock.newCondition();
// 在所有线程被唤醒前,需要执行的一个Runable对应的run方法
private final Runnable barrierCommand;
// 用于表示“栅栏”当前的状态
private Generation generation = new Generation();
CountDownLatch、CyclicBarrier 使用区别的更多相关文章
- CountDownLatch和CyclicBarrier的区别
		[CountDownLatch.CyclicBarrier和Semaphore]http://www.cnblogs.com/dolphin0520/p/3920397.html [CountDo ... 
- CountDownLatch和CyclicBarrier的区别(转)
		在网上看到很多人对于CountDownLatch和CyclicBarrier的区别简单理解为CountDownLatch是一次性的,而CyclicBarrier在调用reset之后还可以继续使用.那如 ... 
- 并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)
		目录 1. 前言 2. 闭锁CountDownLatch 2.1 CountDownLatch功能简介 2.2 使用CountDownLatch 2.3 CountDownLatch原理浅析 3.循环 ... 
- CountDownLatch/CyclicBarrier/Semaphore 使用过吗?
		CountDownLatch/CyclicBarrier/Semaphore 使用过吗?下面详细介绍用法: 一,(等待多线程完成的)CountDownLatch 背景; countDownLatch ... 
- java 并发工具类CountDownLatch & CyclicBarrier
		一起在java1.5被引入的并发工具类还有CountDownLatch.CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它们都存在于ja ... 
- Join 与 CountDownLatch 之间的区别
		Join 与 CountDownLatch 之间的区别 import java.util.concurrent.CountDownLatch; public class CountDownLatchT ... 
- CountDownLatch CyclicBarrier和 Semaphore
		CountDownLatch CyclicBarrier和 Semaphore 原理 基于AQS实现. 让需要的暂时阻塞的线程,进入一个死循环里面,得到某个条件后再退出循环,以此实现阻塞当前线程的效果 ... 
- Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo
		Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo CountDownLatch countDownLatch这个类使一个线程等待其他线程 ... 
- 并发包下常见的同步工具类(CountDownLatch,CyclicBarrier,Semaphore)
		在实际开发中,碰上CPU密集且执行时间非常耗时的任务,通常我们会选择将该任务进行分割,以多线程方式同时执行若干个子任务,等这些子任务都执行完后再将所得的结果进行合并.这正是著名的map-reduce思 ... 
- JUC之CountDownLatch和CyclicBarrier的区别 (转)
		CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ... 
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (128)-- 算法导论11.1 3题
			三.用go语言,试说明如何实现一个直接寻址表,表中各元素的关键字不必都不相同,且各元素可以有卫星数据.所有三种字典操作(INSERT.DELETE和SEARCH)的运行时间应为O(1)(不要忘记 DE ... 
- 2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5
			2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵. 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5 ... 
- [ABC262E] Red and Blue Graph
			Problem Statement You are given a simple undirected graph with $N$ vertices and $M$ edges. The verti ... 
- Django学习(三) 之  模板中标签的使用
			写在前面 最近看到稀土掘金在搞2023年终总结征文活动,一直想尝试投稿试试,周末我就花了近一下午时间写完初稿,然后周一.周二完成精读再改稿,感觉OK,昨晚凌晨第一时间在稀土掘金投稿. 结果,又发生了同 ... 
- MVC:开发模式
			1.jsp演变历史 1.早期只有servlet,只能使用response输出标签数据,非常麻烦. 2.后来有了jsp,简化了Servlet的开发,如果过度使用jsp中即写大量的Ja ... 
- 算法与数据结构——kpm算法
- Head First Java学习:第八章-接口和抽象类
			第八章:接口和抽象类 深入多态 1.抽象类:有些类不应该被初始化 在类声明前面加上抽象类的关键字,abstract. 防止类被初始化,即不能被"new"创建该类的实例(要求) 还是 ... 
- Mybatis-Flex之QueryWrapper
			1.完整DQL语句 /** * 使用QueryWrapper构建超复杂SQL语句 */ @Test public void testQueryWrapper1() { QueryWrapper wra ... 
- JDK8提供的常用计量单位
			时间计量单位:Duration @DurationUnit(ChronoUnit.HOURS) private Duration serverTimeout; 空间计量单位:DataSize @Dat ... 
- visual studio 2013 汇编环境配置
			网上有很多教程,但是第一次运行仍然出现很多问题,后来我发现忽视了几个个重要的点!!!红色字体标注 教程搬自:https://github.com/JunpengCode/Assembly https: ... 
