信号量和条件的区别(ReentrantLock)

2023-12-07

有谁知道这些方法之间的区别acquire () and release () (java.util.concurrent.Semaphore) and await () and signal (new ReentrantLock().newCondition() ) .

您能为每个方法公开一个伪代码吗?


从表面上看,这些方法的行为可能看起来很相似 -acquire()/await()在某些情况下可能会使线程阻塞release()/signal()在某些情况下可以解锁线程。然而信号量和条件有不同的用途:

  • java.util.concurrent.Semaphore是比较高级的同步机制,供一般开发人员使用。您通常会使用它通过使每个请求者线程调用来限制对某些资源的并发访问acquire()在访问资源之前(如果没有可用的信号量许可,则使线程阻塞)。 javadoc 的描述:

    从概念上讲,信号量维护一组许可证。如果有必要,每个 acquire() 都会阻塞,直到获得许可,然后获取许可。每个release()都会添加一个许可,可能会释放一个阻塞的获取者。

  • java.util.concurrent.locks.Condition是相对较低级别的同步机制,它基本上增强了提供的功能java.lang.Object方法wait(), notify() and notifyAll()。当线程需要等待某些条件变为真时(通常通过其他线程的活动),它使线程能够挂起其活动,然后当状态变量取值时,它使其他线程能够“唤醒”等待线程。部分情况可能已经改变。通常很难正确使用,建议一般开发人员使用 java.util.concurrent 包中的更高级别的机制(如 Semaphore)。

您可以在 Brian Goetz 的优秀著作《Java Concurrency in Practice》中找到更多详细信息。

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

信号量和条件的区别(ReentrantLock) 的相关文章

随机推荐

  • 出现错误:[Errno 95] 在 databricks 中写入 zip 文件时不支持操作 [重复]

    这个问题在这里已经有答案了 在这里 我尝试使用 Databricks 中的以下代码压缩文件并将其写入一个文件夹 挂载点 List all files which need to be compressed import os modelPa
  • 将 @material-ui/core 与 NextJS/React 一起使用时的 FOUC

    我的简单 NextJS 页面如下所示 结果可以在https www schandillia com eslint disable no unused vars import React PureComponent Fragment from
  • 运行谷歌应用引擎时出错:无法识别的参数:admin_console_server

    我正在遵循 Python App Engine 入门 教程 但似乎无法连接到开发服务器 当我尝试运行它时 我不断从日志控制台收到以下错误 2013 08 23 09 46 43 PM Running command u usr bin py
  • 获取窗口开始菜单项/快捷方式文件的“友好”名称

    这很奇怪 一些开始菜单项似乎解析为实际 lnk 文件中未包含的 友好 名称 例如 c ProgramData Microsoft Windows Start Menu Programs Accessories System Tools df
  • 在表单中暂停 GIF

    只是想知道如何暂停 GIF 图像 我正在访问服务器 我希望在发生某些事情时播放 gif 图像 并且如果系统冻结 我希望它暂停 我有一个图片框 上面附有图像 这可能吗 PictureBox 使用 ImageAnimator 类来制作 GIF
  • 如何处理NLP中的两种实体提取方法

    我正在使用两种不同的实体提取方法 https rasa com docs nlu entities 同时在 RASA 框架中构建我的 NLP 模型以构建聊天机器人 机器人应该处理具有自定义实体以及一些一般问题 例如位置或组织 的不同问题 因
  • 如何在Xcode 8中按顺序调用XCTest测试用例函数?

    XCTest 测试函数按字母顺序调用 在 Xcode 8 之前 使用 Xcode 8 我无法假设系统调用测试用例的顺序 有人可以阐明它吗 类内的测试在 Xcode 8 中以随机顺序运行 这鼓励测试独立的 and 可重复的 我假设您想按特定顺
  • TEE 2012 不会自动检出文件

    我有 TFS Server 2012 SP1 Eclipse 3 6 2 Helios 服务版本 2 三通 11 0 0 201211191425 我看到了完整的团队菜单 我可以手动签出和签入文件 但是 如果我刚刚开始编辑文件 它不会自动检
  • 生成字符数组的所有排列

    读了这么多 生成字符串排列 的帖子后 我尝试用Java编写它 1 从第一个字符开始与组合中的其余字符交换 但是当我尝试使用递归实现它时 它只给了我两个长度为 3 的字符串 public static void main String arg
  • 使用泛型方法时如何正确约束相关类类型?

    我有两个基类BaseObject and BaseObjectSettings 第一个定义对象行为 第二个定义类的状态 对于序列化有用 如果我想创建具有特定设置的派生 BaseObject 类 那么我可以使用具有泛型类型约束的方法 publ
  • Payu付款错误“发生一些错误,请重试!”

    我已经通过官方文档将 payu 集成到我的 Android 应用程序中https www payumoney com dev guide mobilecheckout android html prereq 我面临的问题是我的代码与测试凭据
  • 检测 FFT 图中的峰值

    I was wondering how is it possible to detect new peaks within an FFT plot in Python let s say i have this simple Plot An
  • Android:如何阻止 Android 1.6+ 缩放图像

    我更新了我的构建以针对 Android 1 6 构建 现在我的位图在高密度屏幕上按比例缩小 我不想要这种行为 我试了一下 http blog tomgibara com post 190539066 android unscaled bit
  • 如何返回 tkinter 中作为命令给出的函数的值

    我用 python 写了一个非常简单的代码tkinter 它包含一个输入框 我想将用户插入的值保留给我自己 以备以后需要使用它 这是代码 import tkinter as tk root tk Tk root geometry 600x4
  • 将表从 Amazon RDS 导出到 CSV 文件

    我有一个 MySQL 数据库正在运行亚马逊RDS 我想知道如何将整个表导出为 CSV 格式 我目前在 Windows 上使用 MySQL 服务器来查询 Amazon 数据库 但是当我尝试运行导出时出现错误 可能是因为没有适用于 amazon
  • MvcTextTemplateHost 是什么以及在哪里可以找到

    我想知道这是什么MvcTextTemplateHost 我的 create tt 中有这个 但我无法在 bin 文件夹中找到它 使用对象查看器搜索 我读了一下 发现它在我的 VisualStudio Extensions web dll 但
  • R 行乘法 - 重新设计? [复制]

    这个问题在这里已经有答案了 比如说 如果我有一个 lots x 5 矩阵和一个 1 x 5 矩阵 是否有比这更好的方法将它们逐行相乘 gt q 1 2 3 4 5 1 1 2 3 4 5 gt z 1 2 3 4 5 1 1 6 11 16
  • 如何给 iframe 100% 高度[重复]

    这个问题在这里已经有答案了 我想 但它仍然没有调整它的大小 当我尝试以像素为单位的高度时 它起作用了 编辑 100 似乎可以在 IE 上运行 但不能在 Firefox 上运行 你可以用 CSS 来做到这一点 请注意 默认情况下 这会将其放置
  • Android中如何知道定位模式是WIFI还是2G/3G基站?

    我们知道Android中有两种定位模式 GPS和网络 如果我们使用网络 那么Android可以使用WIFI或2G 3G基站进行定位 如果没有GPS 我们可以简单地使用LocationManager NETWORK PROVIDER来获取位置
  • 信号量和条件的区别(ReentrantLock)

    有谁知道这些方法之间的区别acquire and release java util concurrent Semaphore and await and signal new ReentrantLock newCondition 您能为每