当前位置: 首页 > 知识库问答 >
问题:

信号量和条件之间的差异(ReentrantLock)

东门翰
2023-03-14

有人知道方法Acquire()Release()(java.util.concurrent.semaphore)与await()signal(new ReentrantLock().newcondition()之间的区别吗。

您可以为这些方法中的每一个公开伪代码吗?

共有1个答案

史逸春
2023-03-14

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

>

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

    从概念上讲,信号量维护一组许可。如果有必要,每个acquire()都会阻止,直到有许可可用,然后接受它。每个release()都添加一个许可,潜在地释放一个阻塞获取器。

  •  类似资料:
    • 问题内容: 有谁知道方法和()和和之间的差异。 您可以为每种方法公开伪代码吗? 问题答案: 从表面上看,这些方法的行为可能看起来很相似- 在某些情况下 可能使线程阻塞,在某些情况下可能会导致线程阻塞。但是,信号量和条件有不同的用途: 是相对较高级别的同步机制,供一般开发人员使用。您通常会使用它来限制对某些资源的并发访问,方法是在访问资源之前先进行每个请求者线程调用(如果没有信号灯许可,则使线程阻塞

    • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

    • 本文向大家介绍硬件和软件之间的差异。,包括了硬件和软件之间的差异。的使用技巧和注意事项,需要的朋友参考一下 硬件 硬件代表计算机的物理组件,例如其电子部件。例如,CPU,内存,硬盘,显示器,打印机,鼠标等。 软件 软件,代表在计算机系统上执行不同任务的程序。它是由CPU执行的编程代码,可以从键盘,鼠标等输入设备获取指令,并可以在监视器,打印机等输出设备上显示输出。例如MS Word,Google

    • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

    • 本文向大家介绍带宽和吞吐量之间的差异,包括了带宽和吞吐量之间的差异的使用技巧和注意事项,需要的朋友参考一下 带宽 带宽是指通道的数据容量。它定义为可以在特定时间段内传输的数据的潜力。 吞吐量 吞吐量是指在特定时间段内传输的数据的度量。它也被称为有效数据速率或有效负载速率。 以下是带宽和吞吐量之间的重要区别。 序号 键 带宽 吞吐量 1 定义 可以在特定时间段内传输的通道的数据容量。 在特定时间段内

    • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

    • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(

    • 我正在通过做微控制器项目来自学C++。我当前的项目是使用一对或Adafruit羽毛分组无线电。无线电数据包的库函数需要一个C样式的字符串(我相信),我理解它是一个char的数组。 我已经设置了一个枚举来反映接收方的各种操作,并希望将该状态发送回发送方。所以我想把枚举变成char的数组。 在搜索将枚举转换为char数组的方法时,最简单的方法(对我来说)是将枚举变量传递给带有switch语句的函数,该