`
ch_space
  • 浏览: 111284 次
  • 性别: Icon_minigender_1
  • 来自: 农村进城务工人员
社区版块
存档分类
最新评论

CountDownLatch与CyclicBarrier

    博客分类:
  • Java
阅读更多
CountDownLatch与CyclicBarrier被设计用来进行一组线程协作工作,完成一个或多个阶段的任务,二者有什么区别与联系呢?
1、CountDownLatch
这个用来设置一个屏障点,这个屏障点有好几把锁,每把锁都被开开之后,主线程才能继续往下面执行。
一个李子:3个人去骑行,约定到某个地方集合吃饭,全部到之后老板才上菜。

//3个人出发,每个人到店之后报告老板
CountDownLatch latch=new CountDownLatch(3);
go(latch);
//全部到店之前,老板一直等着,不上菜
latch.await();

//所有人都到了,老板上菜
serve();



go(CountDownLatch latch){
   //第1个人出发,到了后通知老板
   latch.countDown();
   //第2个人出发,到了后通知老板
   latch.countDown();
   //第3个人出发,到了后通知老板
   latch.countDown();
}


2、CyclicBarrier

CyclicBarrier与CountDownLatch类似,但是可以去完成好几个阶段的任务,比如上述李子,到店吃玩饭后继续出发,到下一个目的地,全部到了之后再吃饭。
此时CyclicBarrier可以完成循环等待。

//3个人出发,每个人到店之后报告老板
CyclicBarrier cb =new CyclicBarrier(3);
for(...){
   //每个人出发
   go(cb);
}


//一个人的行程
go(CyclicBarrier cb){
   //到达地点1,等待其他人到齐
   cb.await();
   //都到了吃饭,然后再出发
   eat then continue going;
   
   //到达地点2,等待其他人到齐
   cb.await();
   //都到了吃饭
   eat;
}



总结:
CountDownLatch与CyclicBarrier 都是使一组线程协同完成一项任务,而CyclicBarrier 可以循环进行,完成多个阶段的任务(当然也可以用在单个任务的处理),CountDownLatch用的比较多。
分享到:
评论

相关推荐

    Java中的CountDownLatch与CyclicBarrier:深入理解与应用实践

    在Java的并发编程中,CountDownLatch和CyclicBarrier是两个非常重要的同步工具,它们用于协调多个线程的执行顺序。本文将详细介绍CountDownLatch和CyclicBarrier的工作原理、使用场景以及如何在实际项目中应用它们。...

    CountDownLatch和CyclicBarrier用法实例大全

    与CountDownLatch不同,CyclicBarrier可以重置,因此可以多次使用。 1. **初始化**: 通过`CyclicBarrier(int parties, Runnable barrierAction)`构造函数初始化,`parties`表示需要等待的线程数量,`barrierAction`...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解 Java并发编程是Java语言中的一种高级技术,用于处理多线程编程中的同步问题。Java 1.5中引入了几个高效的辅助类,包括CountDownLatch、...

    java并发编程中CountDownLatch和CyclicBarrier的使用.pdf

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    CountDownLatch 和 CyclicBarrier 的运用(含AQS详解)

    **CyclicBarrier与AQS的关系:** 虽然 CyclicBarrier 的实现不是直接基于 AQS,但它通过 ReentrantLock 实现了类似的功能,而 ReentrantLock 的底层实现正是 AQS。CyclicBarrier 内部使用 ReentrantLock 的 ...

    CountDownLatch、CyclicBarrier、Semaphore.md

    java 高并发应用场景

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    与CountDownLatch不同,CyclicBarrier允许一组线程在达到某个预设的阈值(barrier点)时一起继续执行。CyclicBarrier的内部实现使用了ReentrantLock和Condition。它的核心概念是“代”,每个使用CyclicBarrier的事件...

    Java concurrency之CountDownLatch原理和示例_动力节点Java学院整理

    下面我们将深入探讨CountDownLatch的原理、使用方法以及与CyclicBarrier的区别。 首先,CountDownLatch的构造函数接受一个整数参数`count`,这个值表示计数器的初始值。当这个计数器归零时,所有等待在`await()`...

    Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

    在Java并发编程中,CountDownLatch、CyclicBarrier和Semaphore是三种重要的线程协作工具,它们都基于AbstractQueuedSynchronizer(AQS)框架来实现线程间的同步和协调。AQS是一个内置的锁和同步组件,它为构建高级...

    CountDownLatch练习

    1. **CountDownLatch与CyclicBarrier的区别**:CountDownLatch是一次性的,计数到零后无法重用;CyclicBarrier可以重置,允许多次同步点。 2. **如何避免死锁与饥饿**:在使用CountDownLatch时,要确保所有线程都能...

    Java中的CountDownLatch类最全讲义

    目录: 简介 1.1 并发编程与线程同步 1.2 CountDownLatch概述 CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 ...CountDownLatch与CyclicBarrier的对比 最佳实践与注意事项

    Java并发编程之美_部分71

    本节主要讲解了Java并发包中线程同步器原理剖析,具体来说是 CountDownLatch 和 CyclicBarrier 的使用和原理剖析。 一、CountDownLatch CountDownLatch 是一个同步工具,它可以让一个线程等待其他线程完成某些操作...

    笔记-2、线程的并发工具类2

    4. **CountDownLatch与CyclicBarrier的区别** - CountDownLatch的放行是由第三方(持有计数器的线程)控制,而CyclicBarrier的放行是由参与等待的线程自身控制。 - CountDownLatch的放行条件是计数器的值大于等于...

    关于 java.util.concurrent 您不知道的 5 件事,第 2 部分

    2. **CountDownLatch与CyclicBarrier** CountDownLatch是一个同步辅助类,允许一个或多个线程等待其他线程完成操作。它是一个一次性使用的计数器,当计数值为0时,所有等待的线程才能继续执行。CyclicBarrier则允许...

    互联网大厂Java工程师岗位面试真题

    【CountDownLatch与CyclicBarrier】 CountDownLatch用于一次性释放多个线程,而CyclicBarrier允许多个线程等待至某个点一起开始执行。 【线程锁】 线程锁包括synchronized关键字和java.util.concurrent.locks包下的...

    Java 并发编程实战.pdf

    **CountDownLatch与CyclicBarrier** - **CountDownLatch**:允许一个或多个线程等待其他线程完成操作。 - **CyclicBarrier**:允许一组线程相互等待直到到达某个公共屏障点。 #### 3. **Semaphore** - **定义**...

    Java并发编程实践.pdf

    ##### 3.3 CountDownLatch与CyclicBarrier - **CountDownLatch**:允许一个或多个线程等待其他线程完成操作。它通过一个计数器来实现这种机制,每当一个参与者完成任务后,计数器的值就会减1;当计数器的值变为0时,...

    2021 java面试题.doc_面试资料下载

    CountDownLatch与CyclicBarrier - **CountDownLatch**: - 通过一个计数器实现,当计数器减为0时,等待的所有线程被唤醒。 - 通常用于等待一组子线程完成各自的工作后再继续执行后续的操作。 - **CyclicBarrier*...

Global site tag (gtag.js) - Google Analytics