主要区别

  • 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 使用区别的更多相关文章

  1. CountDownLatch和CyclicBarrier的区别

    [CountDownLatch.CyclicBarrier和Semaphore]http://www.cnblogs.com/dolphin0520/p/3920397.html   [CountDo ...

  2. CountDownLatch和CyclicBarrier的区别(转)

    在网上看到很多人对于CountDownLatch和CyclicBarrier的区别简单理解为CountDownLatch是一次性的,而CyclicBarrier在调用reset之后还可以继续使用.那如 ...

  3. 并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)

    目录 1. 前言 2. 闭锁CountDownLatch 2.1 CountDownLatch功能简介 2.2 使用CountDownLatch 2.3 CountDownLatch原理浅析 3.循环 ...

  4. CountDownLatch/CyclicBarrier/Semaphore 使用过吗?

    CountDownLatch/CyclicBarrier/Semaphore 使用过吗?下面详细介绍用法: 一,(等待多线程完成的)CountDownLatch  背景; countDownLatch ...

  5. java 并发工具类CountDownLatch & CyclicBarrier

    一起在java1.5被引入的并发工具类还有CountDownLatch.CyclicBarrier.Semaphore.ConcurrentHashMap和BlockingQueue,它们都存在于ja ...

  6. Join 与 CountDownLatch 之间的区别

    Join 与 CountDownLatch 之间的区别 import java.util.concurrent.CountDownLatch; public class CountDownLatchT ...

  7. CountDownLatch CyclicBarrier和 Semaphore

    CountDownLatch CyclicBarrier和 Semaphore 原理 基于AQS实现. 让需要的暂时阻塞的线程,进入一个死循环里面,得到某个条件后再退出循环,以此实现阻塞当前线程的效果 ...

  8. Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo

    Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo CountDownLatch countDownLatch这个类使一个线程等待其他线程 ...

  9. 并发包下常见的同步工具类(CountDownLatch,CyclicBarrier,Semaphore)

    在实际开发中,碰上CPU密集且执行时间非常耗时的任务,通常我们会选择将该任务进行分割,以多线程方式同时执行若干个子任务,等这些子任务都执行完后再将所得的结果进行合并.这正是著名的map-reduce思 ...

  10. JUC之CountDownLatch和CyclicBarrier的区别 (转)

    CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...

随机推荐

  1. windows下使用Mingw执行make编译

    目录 windows下使用Mingw执行make编译 下载安装 Mingw 设置环境变量 验证环境 gcc mingw32-make 编译 一.准备好相关代码 二.执行Makefile 运行 优化 整 ...

  2. Spring5学习随笔-Spring5的第一个程序(环境搭建、日志框架整合)

    第二章.第一个Spring程序 1.软件版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5.1.4 官网:www.spring.io 2. ...

  3. c#中责任链模式详解

    基本介绍:   "责任链"顾名思义,是指一个需要负责处理请求的链条.   每个链条节点都是一个单独的责任者,由责任者自己决定是否处理请求或交给下一个节点.   在设计模式中的解释则 ...

  4. 矩阵重叠 (3.18 leetcode每日打卡)

    度简单66收藏分享切换为英文关注反馈矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形 ...

  5. HarmonyOS 开发入门(二)

    HarmonyOS 开发入门(二) 日常逼逼叨 在HarmonyOS 开发入门(一)中我们描述了 HarmonyOS 开发的语言ArKTs以及Ts简单的入门级语法操作,接下来我们进入第二部分Harmo ...

  6. 快速认识什么是:Docker

    Docker,一种可以将软件打包到容器中并在任何环境中可靠运行的工具.但什么是容器以及为什么需要容器呢?今天就来一起学快速入门一下Docker吧!希望本文对您有所帮助. 假设您使用 Cobol 构建了 ...

  7. [USACO2007NOVG] Telephone Wire G

    题目描述 Farmer John's cows are getting restless about their poor telephone service; they want FJ to rep ...

  8. python tkinter 使用(二)

    python tkinter 使用(二) 本篇文章着重讲下tkinter中messagebox的使用. 1:提示框 def showinfo(event): messagebox.showinfo(& ...

  9. WebView中的页面调试方法

    在 iOS 12 中,苹果正式弃用 UIWebView,改成 WKWebView,参考官方声明. 后者在性能.稳定性.功能方面有很大提升,并且与 Safari 具有相同的 JavaScript 引擎( ...

  10. 启动android项目时报dx.jar错误的解决方案

    启动android项目时遇到如下错误: Failed to load E:\SDK\android-sdk-windows\build-tools\27.0.2\lib\dx.jar 原因: 自动使用 ...