首页 > 其他分享 >CyclicBarrier和CountDownLatch的区别

CyclicBarrier和CountDownLatch的区别

时间:2023-08-14 18:37:18浏览次数:38  
标签:区别 线程 CountDownLatch println threadNum CyclicBarrier 等待

引言

在并发编程中,CyclicBarrier和CountDownLatch是两个常用的同步工具类。它们都可以用于线程之间的等待和协调,但在使用方式和功能上有一些区别。本文将深入探讨CyclicBarrier和CountDownLatch的区别,并给出相应的代码示例。

CyclicBarrier和CountDownLatch简介

CyclicBarrier

CyclicBarrier是Java提供的一种同步辅助类,它可以让一组线程互相等待,直到到达某个公共屏障点。当所有线程都到达屏障点后,这些线程才能继续执行后续的操作。

CountDownLatch

CountDownLatch也是Java提供的一种同步辅助类,它可以让一个或多个线程等待,直到其他线程执行完一组操作后再继续执行。

区别对比

下面是CyclicBarrier和CountDownLatch的区别对比:

1. 使用方式

CyclicBarrier的使用方式相对复杂一些,需要明确指定线程的数量,并在每个线程到达屏障点后执行特定的操作。

CountDownLatch的使用方式相对简单,只需要调用await()方法等待其他线程执行完一组操作即可。

2. 是否可重用

CyclicBarrier可以重用,即在所有线程到达屏障点后,屏障会自动重置,线程可以继续使用。

CountDownLatch不能重用,一旦计数器减到0,就无法再次使用。

3. 等待方式

CyclicBarrier等待线程的方式是通过await()方法进行等待,可以选择等待一定的时间或者等待其他线程到达。

CountDownLatch等待线程的方式是通过await()方法进行等待,直到计数器减到0。

4. 功能

CyclicBarrier主要用于线程之间的等待和协调,在所有线程到达屏障点后可以执行特定的操作。

CountDownLatch主要用于等待其他线程执行完一组操作后再继续执行。

代码示例

下面给出一个简单的CyclicBarrier和CountDownLatch的代码示例:

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.CountDownLatch;

public class CyclicBarrierDemo {
    public static void main(String[] args) throws InterruptedException {
        final int threadCount = 5;
        final CyclicBarrier cyclicBarrier = new CyclicBarrier(threadCount, () -> {
            System.out.println("所有线程已到达屏障点");
        });

        for (int i = 0; i < threadCount; i++) {
            final int threadNum = i;
            new Thread(() -> {
                try {
                    System.out.println("线程" + threadNum + "已到达屏障点");
                    cyclicBarrier.await();
                    System.out.println("线程" + threadNum + "继续执行");
                } catch (InterruptedException | BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        final int threadCount = 5;
        final CountDownLatch countDownLatch = new CountDownLatch(threadCount);

        for (int i = 0; i < threadCount; i++) {
            final int threadNum = i;
            new Thread(() -> {
                try {
                    System.out.println("线程" + threadNum + "开始执行");
                    Thread.sleep(1000);
                    System.out.println("线程" + threadNum + "执行完毕");
                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }

        countDownLatch.await();
        System.out.println("所有线程执行完毕");
    }
}

标签:区别,线程,CountDownLatch,println,threadNum,CyclicBarrier,等待
From: https://blog.51cto.com/u_16188843/7079755

相关文章

  • cookie和session的区别及原理
    Cookie概念在浏览某些网站时,这些网站会把一些数据存在客户端,用于使用网站等跟踪用户,实现用户自定义功能.是否设置过期时间:如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器,cookie就消失了.这个生命期为浏览会话期的cookie,就是会话C......
  • 计算机网络中速率和带宽的区别
    速率,指的是连接在计算机网络上的主机在数字信道上传送数据的速率,它也称为数据率或比特率,单位是bps。速率往往指的是额定速率或者标称速率,意思也就是在非常理想的情况下才能达到的数据传送的速率,然而在现实生活中是达不到的。带宽,在计算机网络中用来表示网络的通信线路传送数据的能......
  • 锐龙r76800h和r75800h差多少 r7 6800h和r7 5800h区别
    AMDR76800H采用了6nm工艺,Zen3+架构,参数为8C16T,最高4.7GHz,16MBL3缓存,12CU2.2GHz核显。选R75800H还是r76800h这些点很重要!看完你就知道了http://www.adiannao.cn/dyR75800H为8核16线程,主频3.2GHz,三级缓存翻倍至16MB,搭载了DDR4-3200内存。R7-6800H与R7-......
  • 入手评测锐龙r7 6800u和r7 6800h区别 r76800u和r76800h对比
    aMD锐龙76800U处理器,采用全新的Zen3+架构,6nm制程工艺,8大核16线程,最大加速时钟频率可达4.7GHz,三级缓存16MB。锐龙76800U处理器核显为AMDRadeon680M显卡,RDNA2架构,12显示核心,2200MHz显示频率,相较于前代显示性能提升约2倍选r76800u还是r76800h这些点很重......
  • 锐龙r5 6600h和r7 6800h核显对比 r76800h和r56600h区别
    1、R5-6600H配置参数:6nm的工艺,6核12线程,3.3GHz的主频,4.5GHz的睿频,三级缓存16MB,功耗TDP为45W,核显为radeon660m,6CU笔记本cpu选r56600h还是r76800h这些点很重要看过你就懂了http://www.adiannao.cn/dy2、R7-6800H配置参数:6nm的工艺,8核16线程,3.2GHz的主频,4.7GHz的睿频,三级缓存16MB......
  • r7 6800hs 和r7 6800h区别 r76800hs 和r76800h差距
    AMDR76800H采用了6nm工艺,Zen3+架构,参数为8C16T,最高4.7GHz,16MBL3缓存,12CU2.2GHz核显。选r76800hs还是r76800h这些点很重要!看完你就知道了http://www.adiannao.cn/dyAMDRyzen7-6800HS是基于伦勃朗一代的大型(游戏)笔记本电脑的处理器。R76800HS集成了基于Zen3+微......
  • i913900hx和i912900h区别 i9 13900hx和12900h对比
    i913900Hx采用10nm制作工艺最高睿频5.4GHz二十四核心三十二线程三级缓存36MB热设计功耗(TDP)157W选i913900hx还是i912900h这些点很重要看过你就懂了http://www.adiannao.cn/dyi912900H参数配置:10nm的工艺制程,6个大核8个小核,14核心20线程,3.8GHz的主频,5.0GHz的睿频,功耗最高为1......
  • i913980hx和i913900hx区别 酷睿i9 13980hx和i9 13900hx选哪个
    i913900Hx采用10nm制作工艺最高睿频5.4GHz二十四核心三十二线程三级缓存36MB热设计功耗(TDP)157W选i913900hx和i913980HX这些点很重要看过你就懂了http://www.adiannao.cn/dyi913980HX采用10纳米制作工艺最高睿频5.6GHz二十四核心三十二线程三级缓存36MB热设计功耗(T......
  • i913900h和i913980hx区别 i9 13900h和i9 13980hx差多少
    i913900h采用10纳米制作工艺最高睿频5.4GHz十四核心二十线程三级缓存36MB热设计功耗(TDP)115W支持最大内存64GB内存类型DDR43200MHzDDR55200MHz集成显卡IntelIrisXeGraphics笔记本cpu选i913980hx还是i91390H这些点很重要看过你就懂了http://www.adiannao.cn/......
  • session 和 cookie 的区别是什么
    Session和Cookie都是在Web开发中用于维护用户状态和存储数据的机制,但它们有一些重要的区别1.存储位置Cookie:Cookie是存储在用户浏览器中的小型文本文件,通常由服务器在HTTP响应头中发送给浏览器,然后浏览器将其存储在用户的计算机上。每当用户发送请求时,浏览器都会将相关的Coo......