Java 如果条件变量不是作为队列实现的,为什么条件变量也称为条件队列?

Java 如果条件变量不是作为队列实现的,为什么条件变量也称为条件队列?,java,multithreading,concurrency,Java,Multithreading,Concurrency,在Javadoc中 条件(也称为条件队列或条件变量)为一个线程提供了一种暂停执行(以“等待”)的方法,直到另一个线程通知某个状态条件现在可能为真 我想知道Java中的条件变量是否真的有一个隐藏的队列。我对此表示怀疑,因为如果锁不公平,等待的线程将不会以先进先出的方式被唤醒,因此很难证明为什么条件变量也以“条件队列”命名 有人知道“条件队列”这个术语是否有意义吗?若有,原因为何 有人知道“条件队列”这个术语是否有意义吗?若有,原因为何 这是有道理的 一般来说,很难证明技术术语的字面意义是正确的。一

在Javadoc中

条件(也称为条件队列或条件变量)为一个线程提供了一种暂停执行(以“等待”)的方法,直到另一个线程通知某个状态条件现在可能为真

我想知道Java中的条件变量是否真的有一个隐藏的队列。我对此表示怀疑,因为如果锁不公平,等待的线程将不会以先进先出的方式被唤醒,因此很难证明为什么条件变量也以“条件队列”命名

有人知道“条件队列”这个术语是否有意义吗?若有,原因为何

有人知道“条件队列”这个术语是否有意义吗?若有,原因为何

这是有道理的

一般来说,很难证明技术术语的字面意义是正确的。一般来说,深入挖掘并不是一件有用的事情。。。除非你觉得这些东西有趣。(例如,为什么我们使用术语“bug”?程序不包含昆虫!)

在这种情况下,没有这样的困难。他说:

从概念上讲,条件变量是一个线程队列,与监视器关联,线程可以在其上等待某个条件变为真

事实上,在某些情况下,它们可能使用严格的FIFO队列来实现。只是在Java
Condition
接口的实现中通常不使用严格队列。(当然,Java
Queue
API不用于此目的。)

最重要的一点是,插入语“也称为条件队列或条件变量”的注释是为了帮助目前在其他上下文中使用这两个术语的人了解javadoc文档所描述的内容



1-事实上,由于
条件
实际上是一个接口,因此接口的某些实现可能会使用队列。或者,由于线程调度程序的实现实际上在操作系统中,因此在某些操作系统上可能会使用严格的队列。

只有在最近到达的队列被强制到队列的末尾时,队列才是公平的。如果它能绕过队列,那就不公平了。但在任何情况下,经典条件变量(由Hoare定义)都意味着某种跟踪等待线程的方法,即队列。此外,典型的锁/条件实现实际上使用了隐藏的队列,因为公平锁和不公平锁在这方面没有区别(维护两种不同的实现成本太高了)。实际的区别是,不公平的锁允许到达的线程在锁定成功时立即绕过队列(甚至公平的锁在使用
tryLock
时也允许)。