簡體   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