繁体   English   中英

wait / notify和Condition如何管理线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM