当前位置: 首页 > 面试题库 >

Java并发性:倒数锁存器与循环障碍

何长恨
2023-03-14
问题内容

我在阅读java.util.concurrent
API
时发现

  • CountDownLatch:同步帮助,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
  • CyclicBarrier:同步帮助,它允许一组线程互相等待以到达一个公共的障碍点。

在我看来,两者似乎是平等的,但我相信还有更多的东西。

例如,在中CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier

两者之间还有其他区别吗?有人想
use cases哪里重置倒计时的值?


问题答案:

一个主要的区别是CyclicBarrier承担了一个(可选的)可运行任务,该任务在满足公共屏障条件后运行。

它还允许您获取在障碍处等待的客户端数量以及触发障碍所需的数量。触发后,屏障将重置并可以再次使用。

对于简单的用例-服务启动等… CountdownLatch很好。CyclicBarrier对于更复杂的协调任务很有用。这样的事情的一个例子是并行计算-
在计算中涉及多个子任务-类似于MapReduce。



 类似资料:
  • 问题内容: 我正在阅读《 实践Java并发 》一书。在第15章中,他们讨论了非阻塞算法和 比较交换 (CAS)方法。 据记载,CAS的性能比锁定方法好得多。 我想问一下已经使用这两个概念的人,并想听听您何时更喜欢这些概念中的哪一个? 真的那么快吗? 对我来说,锁的用法更加清晰,易于理解,甚至维护起来也更好 (如果我错了,请纠正我) 。我们是否应该真正专注于创建与CAS相关的并发代码,而不是锁定,以

  • 主要内容:1 CyclicBarrier的概述,2 CyclicBarrier的原理,2.1 基本结构,2.2 await等待,2.3 await(timeout unit)超时等待,2.4 reset重置屏障,3 CyclicBarrier的使用,4 CyclicBarrier的总结详细介绍了CyclicBarrier循环屏障的原理和应用,以及与CountDownLatch的对比! 1 CyclicBarrier的概述 public class CyclicBarrier extends Ob

  • 本文向大家介绍Swift并发循环,包括了Swift并发循环的使用技巧和注意事项,需要的朋友参考一下 例子 GCD提供了执行循环的机制,从而使循环相对于彼此同时发生。当执行一系列计算量大的计算时,这非常有用。 考虑以下循环: 您可以使用concurrentPerform(在Swift 3中)或dispatch_apply(在Swift 2中)同时执行这些计算: 3.0 3.0 该环路闭合将被调用每个

  • 8.5. 并发的循环 本节中,我们会探索一些用来在并行时循环迭代的常见并发模型。我们会探究从全尺寸图片生成一些缩略图的问题。gopl.io/ch8/thumbnail包提供了ImageFile函数来帮我们拉伸图片。我们不会说明这个函数的实现,只需要从gopl.io下载它。 gopl.io/ch8/thumbnail package thumbnail // ImageFile reads an

  • 主要内容:示例,死锁解决方案示例死锁描述了两个或多个线程等待彼此而被永久阻塞的情况。 当多个线程需要相同的锁定但以不同的顺序获取时,会发生死锁。 Java多线程程序可能会遇到死锁状况,因为关键字会导致执行线程在等待与指定对象相关联的锁定或监视时出现阻止情况。 看看下面一个例子。 示例 当您编译并执行上述程序时,会出现死锁情况,以下是程序生成的输出 - 上述程序将永久挂起,因为两个线程都不能继续进行,等待彼此释放锁定,所以您可以按

  • 本文向大家介绍Java并发问题之乐观锁与悲观锁,包括了Java并发问题之乐观锁与悲观锁的使用技巧和注意事项,需要的朋友参考一下 首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再