wait-notify 和 CountDownLatch 之间的区别

2024-01-01

我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势。我认为notifyAll()确实做了同样的事情,而且看起来更容易使用(可能是因为熟悉)。

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

Thanks !

编辑:我想我需要重新表述我的查询:

Await() 根据文档说:

导致当前线程wait直到锁存器倒数为零,除非线程被中断。

对我来说,很难看出 wait() 和 wait() 之间的区别 - wait() 确实在幕后使用 wait(),并且当计数达到零时似乎有一个隐式的 notificationAll() 。

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


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

不知道你有没有用过notifyAll() and CountDownLatch, but notifyAll()除非您计算过发生了多少事件,否则单独不会给您带来相同的行为。CountDownLatch可能最适合执行固定数量的任务并等待这些任务完成,然后再恢复执行程序的其余部分。当您有固定数量的线程时(例如,ThreadPool)执行固定数量的任务,但是您的线程比任务少得多,您必须重用它们。与一个CountDownLatch您可以轻松等待所有任务完成。不知道你用得怎么样notifyAll()实现相同的行为,但如果您向我们提供更多信息,我们可以确定两者中哪一个是更好的选择(当然在某些情况下waitNotify()更合适)。

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

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

await()是一个实际函数CountDownLatch然而wait()继承自Object。我建议您检查文档以了解它们的作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wait-notify 和 CountDownLatch 之间的区别 的相关文章

随机推荐

  • 将 Trait 值传递给 SubFactory Django

    我有两个工厂 class DispatchDataFactory factory django DjangoModelFactory class Meta model models DispatchData order factory Se
  • Snowflake date_trunc 从日期中删除时间

    我有雪花列 其中包含 yyyy mm dd hh MM ss 格式的日期 我使用下面的函数 date trunc DAY 2019 09 23 12 33 25 输出 2019 09 23 00 00 00 预计按照文档 https doc
  • 在 C# 中使用参数的成本

    有人对在 C 中使用 params 进行方法参数传递有建议吗 我正在考虑使用 params 功能对前 6 个参数进行重载 然后对第 7 个参数进行重载 我的理由是避免参数功能所需的额外数组分配 这是针对一些高性能实用方法的 有什么建议吗 创
  • 用随机颜色填充封闭区域 - Haskell - 星期五

    我正在尝试执行不是很复杂的图像分析 以尝试找到不同的形状并计算它们的一些参数 例如面积和周长 以像素为单位 并且我正在尝试在 Haskell 中执行此操作 我想这样做是为了尝试使用函数式编程语言 The first task in line
  • 使用gson反序列化对象的特定JSON字段

    我有以下 JSON 字符串 ms images 5160 1 turl http ts1 mm bing net th id I4693880201938488 pid 1 1 height 178 width 300 imgurl htt
  • MySQL C# 连接字符串故障转移

    我知道我可以用逗号分隔连接字符串中的主机 它将使用不同的服务器 https www connectionstrings com mysql connector net mysqlconnection multiple servers htt
  • 是否可以仅在我的项目中使用 Django models 模块?

    我正在开发一个使用 Celery 的小型独立 python 应用程序 我使用 django 框架构建了这个 但我的应用程序只是后端 这意味着用户不需要访问我的网站 并且我的应用程序只是为了从 celery 接收任务队列并对数据库执行操作而构
  • 在哪里指定窗口组件的位置?

    我在 netBeans 平台中创建了模块 然后在那里创建了窗口组件 我想指定主窗口中的默认位置 例如职位 编辑 我在哪里可以做 在 NetBeans 7 下 从 输出 位置更改为 编辑器 位置 在您的 Window 类中 更改注释 TopC
  • 有哪些适合初学者的优秀 Erlang 入门/教程?

    有哪些可以深入了解 Erlang 和函数式编程的好链接 这可能值得一看http learnyousomeerlang com http learnyousomeerlang com
  • Xml 架构:空 targetNamespace

    在 Xml 架构中不使用 targetNamespace 属性或使用空属性是否合法 如果是这样 那么这意味着什么 我们是在 空命名空间 始终存在 中 添加 一些东西 还是创建一个与其他模式无关的 匿名命名空间 实例 xml 文档是什么样子的
  • 以编程方式创建的窗口居中

    我一直在使用这里的示例来创建一个自定义的无标题栏窗口 在 Mac OS X 上绘制自定义窗口 http cocoawithlove com 2008 12 drawing custom window on mac os x html 我发现
  • 使用 col-md-push-* 将列推到下一行

    我有以下 6 个构建模块 1 2 3 4 5 6 所有块在一行中都有一个 col sm 6 类 但由于块 3 超出了 bootstraps 12 列结构 它将跳转到下一行 完美就是我想要的 唯一的问题是 我想交换第 2 块和第 3 块 但它
  • Vue 3 不会检测到对 Vue 组件外部创建的对象所做的更改

    我有一个班级角色 Character ts This is called when server responds public setAttributeByType type StatsTypes value number void sw
  • 找不到实体类型属性的支持字段,并且该属性没有 getter

    我遇到了异常 System InvalidOperationException No backing field could be found for property ApartmentId of entity type Address
  • 从变量扩展环境变量

    我有一个看起来像这样的代码 my var MY FIRST ENV VAR 我的问题是 如何从环境变量 MY ENV VAR 中获取值 我已经尝试了很多东西 但主要问题是 my var 现在是一个字符串 我想这样做的原因是因为我有一些名称几
  • 将 Roslyn 编译的程序集加载到沙箱 ​​AppDomain 中

    我有一个代码片段 它使用脚本引擎编译脚本 并将程序集作为字节数组检索 现在我想加载这个Assembly在沙盒中 这就是我所拥有的 Assembly dynamicAssembly ScriptEngine engine Session se
  • 从 bash 脚本中生成并执行 R、Python 等脚本

    一段时间以来我一直在尝试寻找解决方案 但尚未找到令人满意的解决方案 我编写了很多 bash 脚本 但有时我想使用 R 或 Python 作为脚本的一部分 现在 我最终不得不编写两个脚本 原始的 bash 脚本执行前半部分任务 而 R 或 P
  • C/C++ 罕见关键字 - register、volatile、extern、explicit [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 您能否快速介绍一下这 4 个关键字的
  • 如何以编程方式获取 GC 类直方图

    我想以编程方式获得以下命令的相同结果 jcmd
  • wait-notify 和 CountDownLatch 之间的区别

    我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势 我认为notifyAll 确实做了同样的事情 而且看起来更容易使用 可能是因为熟悉 另外 CountDownLatch 中的 wait 和 wait 有什么区