[英]How wait/notify and Condition manage threads
我知道wait()
和notify()/notifyAll()
方法的目的是替换其他语言中使用的传统循环/轮询结构:
while(true) {
if(pollSomethingForAnEvent())
break;
}
我进一步理解Condition
API是在Java 5中引入的,用于将此模型包装在更“OO”的实现中。
我不明白的是,当Object.notify()
或Condition.signal()
时,Java如何知道要通知哪些线程,或者Java如何知道使用Object.wait()
或Condition.await()
发出哪些线程信号?叫什么名字?
由于这些方法不会将任何内容作为参数,因此JVM如何知道将这些通知传递给哪些线程?!?!
对于每个Condition
或synchronized对象,JVM维护一个等待它们的对象队列。 它还具有运行队列和其他数据结构,用于维护和管理Thread
运行状态。
当Object.notify()
,它只是在与该对象关联的队列中查找第一个Thread
并将其移动到运行队列。 如果队列为空,则不通知任何线程。 如果调用notifyAll()
,则会发出等待该对象的所有线程的信号。
不要使问题复杂化,但有一点需要注意的是,当一个调用了lockObject.wait()
的Thread
被通知时,它会从等待状态转移到运行队列的末尾 ,等待访问lockObject
上的锁。 。 它不会立即开始运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.