首页 > 编程语言 >高级java每日一道面试题-2025年01月04日-并发篇-说说CyclicBarrier和CountDownLatch的区别?

高级java每日一道面试题-2025年01月04日-并发篇-说说CyclicBarrier和CountDownLatch的区别?

时间:2025-01-07 09:30:52浏览次数:9  
标签:面试题 01 java await 计数器 线程 CountDownLatch CyclicBarrier 等待

如果有遗漏,评论区告诉我进行补充

面试官: 说说CyclicBarrier和CountDownLatch的区别?

我回答:

在Java高级面试中,CyclicBarrier和CountDownLatch是两个经常被提及的并发工具类,它们都用于实现线程间的同步,但存在显著的区别。以下是对这两个类的详细比较:

一、计数器使用方式的区别

  1. CountDownLatch

    • 是一个减法计数器。
    • 计数器一旦初始化,只能递减,不能重置或增加。
    • 当计数器的值减至零时,所有因调用await()方法而被阻塞的线程会被唤醒,继续执行。
  2. CyclicBarrier

    • 可以理解为加法计数器,但其实际工作机制并非简单的加法。
    • 计数器可以重复使用,通过reset()方法重置。
    • 当指定数量的线程都调用了await()方法时,这些线程会被同时唤醒,继续执行。此时,计数器会重置为初始值,以便下一轮使用。

二、等待和继续执行的方式

  1. CountDownLatch

    • 主要用于一个或多个线程等待其他线程完成某项任务。
    • 只有当所有需要等待的线程都完成任务(即计数器减至零),被阻塞的线程才能继续执行。
  2. CyclicBarrier

    • 用于一组线程互相等待,直到所有线程都到达某个公共屏障点。
    • 一旦所有线程都到达屏障点,它们会同时被唤醒并继续执行。
    • 由于CyclicBarrier的计数器可以重置,因此它适用于需要多次等待和同步的场景。

三、异常处理

  1. CountDownLatch

    • 计数器的递减操作(countDown())可能会抛出异常,但这些异常不会影响其他线程的执行。
  2. CyclicBarrier

    • 在调用await()方法时可能会抛出异常(如BrokenBarrierException),此时需要使用try-catch块来捕获和处理这些异常。

四、主要区别

是否可复用
  • CountDownLatch:不可复用。一旦计数值达到了0,该 CountDownLatch 就不能再被重置或再次使用。

  • CyclicBarrier:可复用。每当所有线程都到达屏障点后,它可以自动重置并重新开始计数,以便下一轮的线程再次等待。

初始化参数
  • CountDownLatch:仅需指定一个初始计数值,代表需要等待的事件数量。
  • CyclicBarrier:除了指定参与者数量外,还可以提供一个 Runnable 对象作为屏障动作(barrier action),这个动作会在所有线程到达屏障点之后、但在任何线程继续执行之前被执行。
等待行为
  • CountDownLatch:主线程或其他线程可以通过 await() 方法等待,直到计数值变为0。

  • CyclicBarrier:每个线程通过 await() 方法等待,直到所有线程都到达屏障点;如果某个线程提前离开(例如因为异常),则其他线程会抛出 BrokenBarrierException

超时机制
  • CountDownLatch:没有内置的超时机制,但如果使用带超时参数的 await(long timeout, TimeUnit unit) 方法,则可以在指定时间内尝试等待。

  • CyclicBarrier:支持带超时的 await(long timeout, TimeUnit unit) 方法,允许设置最大等待时间,超过此时间如果没有所有线程到达屏障点,则抛出 TimeoutException

五、使用场景

  1. CountDownLatch

    • 适用于主线程等待所有子线程完成任务后再继续执行的场景。
    • 适用于统计多个线程执行时间的场景。
  2. CyclicBarrier

    • 适用于多个线程需要互相等待,并在某个公共点上同步执行的场景。
    • 适用于需要多次等待和同步的周期性任务场景。

标签:面试题,01,java,await,计数器,线程,CountDownLatch,CyclicBarrier,等待
From: https://blog.csdn.net/qq_43071699/article/details/144958204

相关文章

  • 计算机毕设项目分享:21g8a524+springboot基于java的商户点评管理与数据分析系统(毕设源
    基于java的商户点评管理与数据分析系统摘 要商户点评管理与数据分析系统是一个以店铺点评为核心的平台。用户可以通过该网站对商户的评价。同时,用户也可以浏览和发现店铺信息等。本文讲述了基于java语言开发,后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行......
  • 计算机毕设项目ssnel0ot+springboot基于Java的养老院管理系统,计算机毕业生可参考,免费
    springboot基于Java的养老院管理系统摘 要随着社会的发展和人口老龄化的加剧,养老院作为解决老年人居住和生活问题的重要场所,其管理工作日益显得尤为重要。为了提高养老院的管理效率和服务质量,许多养老院开始引入现代化的管理手段,其中养老院管理系统作为一种有效的解决方案,......
  • 毕业设计 基于Java的新能源充电桩管理系统
    源码获取欢迎留言一、摘要新能源汽车充电桩管理系统是一款基于SpringBoot+Vue的应用,采用Java语言开发,以MySQL数据库为后端支持。系统拥有首页、充电桩管理、充电常识、个人中心和后台管理等五大核心功能。首页展示实时充电桩使用状态和相关信息,而充电桩管理模块允许用户方......
  • java学院技能鉴定中心证书管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,人类已全面进入信息化时代。在各个领域,软件和管理系统不断涌现,成为提高办公效率和推动经济发展的关键因素。在教育领域,学......
  • java绿色生活环保宣传网站论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着全球环境问题的日益严峻,如气候变化、资源短缺和环境污染等,人们对绿色生活的关注度不断提高。在互联网时代,信息传播迅速且广泛,建立一个绿色生......
  • PYTHON与JAVA执行时间对比
    PYTHON与JAVA执行时间对比PYTHONJAVA结论PYTHONimporttimestart_time=time.time()n=int(input())jie=1sum=0i=1whilen>=i:jie=jie*isum=sum+jiei=i+1print(sum)end_time=time.time()print("程序执行时间为......
  • 《Java程序设计与实践(微课版)》基本信息
    教程信息与教程主要内容:《Java程序设计与实践(微课版)》,人民邮电出版社,ISBN:978-7-115-65212-6;Java基础(绪论、Java基础语法)、Java面向对象(封装、继承、多态)、Java进阶(Java集合框架、异常处理、JavaI/O流、多线程)、Java应用(JavaSwing图形界面编程、Java网络编程、JDBC数据库编程)。......
  • Java 8系列之重新认识HashMap15
     摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(JavaDevelopmetKit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Ja......
  • 【办公类-88-02】20250106批量读后感
    背景需求学期总结开始写各种总结同事请我代写我手里写5个老师要写。就想试试能不能用“星火讯飞写稿子”+Python(excle\word)批量生成)一、AI生成读后感星火讯飞写出来的读后感内容相同,所以要用不同的关键词1、不同岗位:假如您是一位班主任、假如您是一位幼儿园管理者、......
  • springboot/ssm学生网上选课系统Java代码编写web高校选课排课系统
    springboot/ssm学生网上选课系统Java代码编写web高校选课排课系统基于springboot(可改ssm)+html+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql5.7(或8.0)数据库工具:Navicat/sqlyog开发软件:eclipse/idea依赖管理包:Mav......