首页 > 其他分享 >CountDownLatch、CyclicBarrier 使用区别

CountDownLatch、CyclicBarrier 使用区别

时间:2023-04-09 10:32:04浏览次数:54  
标签:执行 区别 private 屏障 线程 CountDownLatch new CyclicBarrier

CountDownLatch:所有子线程完成后,再执行主线程、 CyclicBarrier: 所有子线程就绪后,再执行子线程

主要区别

  • CountDownLatch:所有子线程完成后,再执行主线程
  • CyclicBarrier: 所有子线程就绪后,再执行子线程

CountDownLatch

所有子线程完成后,再执行主线程

CountDownLatch、CyclicBarrier 使用区别_java

多线程 ThreadPoolTaskExecutor 应用SpringBoot 下载文件

CyclicBarrier

有若干个线程,比如说有五个线程,需要它们都到达了某一个点之后才能开始一起执行,也就是说假如其中只有四个线程到达了这个点,还差一个线程没到达,此时这四个线程都会进入等待状态,直到第五个线程也到达了这个点之后,这五个线程才开始一起进行执行状态

所有子线程就绪后,再执行子线程

CountDownLatch、CyclicBarrier 使用区别_主线程_02


所有子线程都已经到达屏障之后,此时屏障就会消失,所有子线程继续执行,若存子线程尚未到达屏障,其他到达了屏障的线程都会进行等待

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();



标签:执行,区别,private,屏障,线程,CountDownLatch,new,CyclicBarrier
From: https://blog.51cto.com/u_15116285/6178531

相关文章

  • CHR(10)和CHR(13)的区别
    总体来说:chr(10)表示换行,chr(13)表示回车百度搜索所得:“换行”(linefeed)和“回车”(carriagereturn):换行(\n)就是光标下移一行却不会移到这一行的开头,回车(\r)就是回到当前行的开头却不向下移一行。Enter键按下后会执行\n\r这样就是我们看到的一般意义的回车了,所以你用16进制文......
  • ChatGPT 和 Whisper 模型的区别
    ChatGPT和Whisper模型是两个不同的模型,但都是由OpenAI开发的基于自然语言处理(NLP)的人工智能技术。ChatGPT是一种基于GPT(GenerativePre-trainedTransformer)架构的语言模型,它可以生成自然流畅的文本,用于生成对话、文章等各种文本内容。Whisper是一种针对语音助手等场景开发的模......
  • 同步,异步,阻塞,非阻塞的区别
    同步,异步,阻塞,非阻塞的区别同步与异步同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式;同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知,直到得到调用结果;异步:当一个异步调用发出去后,这个调用就直接返回了,调用者不能立即得......
  • drop、truncate和delete的区别
    drop、truncate和delete的区别##删除表和数据结构droptabletestTable##(常用)只是清空数据表删除表中所有记录,并且将重新设置高水线和所有的索引truncatetabletestTable(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志......
  • 2023.04.07 - 用jQuery发起JSONP请求时jsonpCallback和success的回调区别在哪?
    在使用jQuery发起跨域请求时,可以通过指定dataType为jsonp来实现JSONP跨域请求。此时,jQuery会自动生成一个回调函数,并将其作为参数发送给服务器。服务器需要将返回数据包装在回调函数中,以便于客户端解析。以下是一个简单的jQuery实现JSONP跨域请求的示例:$.ajax({......
  • 线程池execute 和 submit 的区别
    1.execute和submit的区别前面说了还需要介绍多线程中使用execute和submit的区别(这两个方法都是线程池ThreadPoolExecutor的方法)。1.1方法来源不同execute方法是线程池的顶层接口Executor定义的,在ThreadPoolExecutor中实现:voidexecute(Runnablecommand);su......
  • 什么是PCB?什么是PCBA?PCB和PCBA的区别?
    什么是PCB?什么是PCBA?二者有何分别?说到PCB这个话题,大家都知道是电路板的一些相关知识。但提到PCBA,很多人不是很清楚,甚至会和PCB混为一谈。下面我们聊聊PCB与PCBA有何不同之处?什么是PCB?PCB中文名称为印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电......
  • Oracle JDK 和 OpenJDK 有什么区别?
    可能在看这个问题之前很多人和我一样并没有接触和使用过OpenJDK。那么OracleJDK和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。对于Java7,没什么关键的地方。OpenJDK项目主要基于Sun捐赠的HotSpot源代码。此外,OpenJDK......
  • delegate、event、EventHandler、Action、Func的使用和区别
    delegate、event、EventHandler、Action、Func的使用和区别【目录】1委托2 事件-概念的引出3 事件-关于异常4 事件-关于异步5 委托-Func与Action 1委托在.NET中定义“委托”需要用到delegate关键字,它是存有对某个方法的引用的一种引用类型变量,类似于C或C++中......
  • 安全等保测评_等保二级和三级的区别
    安全等保测评_等保二级和三级的区别等保测评即网络信息安全等级保护测评,是经公安部认证的具有资质的测评机构,依据国家信息安全等级保护规范规定,受有关单位委托,按照有关管理规范和技术标准,对信息系统安全等级保护状况进行检测评估的活动。 一、等保测评等级划分:等保测评等级总共分......