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

等待通知和CountDownLatch之间的区别

景翰音
2023-03-14
问题内容

我需要一些帮助,以了解使用CountDownLatch与传统的wait-
notify相比的优势。我认为notifyAll()确实做了同样的事情,并且似乎更易于使用(可能是由于熟悉)。

另外,CountDownLatch中的wait()和await()有什么区别?

谢谢 !

编辑:我想我需要改写我的查询:

Await()根据文档说:

使当前线程 等待, 直到锁存器递减计数到零为止,除非该线程被中断。

对我来说,很难看到wait()和await()之间的区别-
await()的确在掩护下使用了wait(),并且当计数达到零时,似乎存在一个隐式notifyAll()。

我要问的是,为什么我不应该简单地使用wait-notifyAll()机制(使用我自己的计数器变量处理),而不是使用CountDownLatch?


问题答案:

他们当然不会做同样的事情:CountDownLatch仅在事件计数达到0时发出信号,并且会自动wait- notify计数,如果您想要实现相同的行为,则需要保留自己的计数。实现相同的行为通常容易出错,最好避免这种情况(尤其是如果您不熟悉并发编程)。比较CountDownLatchwait- notify很难甚至是拿苹果和橘子相比,它更像是一个比较自动挖掘和内六角扳手。

我不知道您是否曾经使用过notifyAll()CountDownLatch,但notifyAll()除非您一直记下发生了多少事件,否则单独不会给您相同的行为。CountDownLatch最适合执行固定数量的任务并等待这些任务完成,然后再继续执行其余程序。当您有固定数量的线程(例如ThreadPool)执行固定数量的任务时,它特别有用,但是您的线程比任务少,您必须重用它们。使用a,CountDownLatch您可以轻松地等待所有任务完成。我不知道您如何一直使用notifyAll()以实现相同的行为,waitNotify()
更合适)。

对于之间的区别wait()await(),我有点失望了!查找文档是任何问题的第一步:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

await()是的实函数,CountDownLatch而是wait()从继承的Object。我建议您检查文档中的内容。



 类似资料:
  • 问题内容: 如果我仅使用同步而不是等待/通知方法,它将仍然保持线程安全吗? 有什么不同 ? 提前谢谢。 问题答案: 使用使方法/块一次只能在线程上访问。因此,是的,它是线程安全的。 这两个概念是结合在一起的,而不是相互排斥的。使用时,您需要在该对象上拥有监视器。所以您需要在此之前。使用使当前线程停止,直到另一个线程在其等待的对象上调用。这是对的补充,它仅确保仅一个线程将进入块/方法。

  • 问题内容: 之间有什么区别: 和 和 问题答案: 注意事项 : 这个答案仅涵盖了系列和系列之间的时序差异。。 为了这个答案的目的,我将使用一些示例方法: 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后解析。 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后被拒绝。 调用将启动计时器。在所有延迟完成后,可以使用等待一些延迟来解决,但请记住它们是同时执行的: 例子

  • 问题内容: 之间有什么区别: 和 和 问题答案: 注意事项: 这个答案仅涵盖了await系列和系列之间的时序差异Promise.all。请务必阅读@mikep的综合答案,其中也涵盖了错误处理方面更重要的区别。 出于此答案的目的,我将使用一些示例方法: res(ms) 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后解析。 rej(ms) 是一个函数,它需要一个整数毫秒,并返回一个

  • 问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来

  • 本文向大家介绍Java并发中CountDownLatch和CyclicBarrier之间的区别,包括了Java并发中CountDownLatch和CyclicBarrier之间的区别的使用技巧和注意事项,需要的朋友参考一下 CountDownLatch和CyclicBarrier都在多线程环境中使用,它们都是其中的一部分。 根据Java Doc- CountDownLatch-同步辅助,允许一个或

  • 问题内容: Selenium WebDriver中有隐式和显式等待。它们之间有什么区别? 请分享有关Selenium WebDriver的知识。请显示带有隐式和显式等待的实时示例。 问题答案: 检查以下链接: -通过轮询DOM来指示Web驱动程序等待一段时间。声明隐式等待后,它将在Web驱动程序实例的整个生命周期中都可用。默认情况下,该值将为0。如果设置了更长的默认值,则该行为将根据浏览器/驱动程