2015-04-27 87 views
-2

我有一段代碼,其中等待時間計算在別處。 在某些情況下,等待時間值爲0,我注意到當等待時間爲零時,線程似乎永遠等待。我無法在Javadoc中找到與此案件相關的任何內容。我可以只添加一個檢查這一點,但我只需要了解爲什麼發生這種情況,是它允許發送0等待時間Object.wait(0)永遠等待

synchronized (monitor) { 
    try { 
     monitor.wait(wait); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

回答

12

Javadocs say

如果超時值爲零,然而,然後實時不考慮,線程只是等到通知。

因此,指定wait(0)意味着無限期地等待。

+0

感謝您的快速答覆, – Ravisha

4

the Javadocs

如果timeout是零,但是,那麼不考慮實時性,線程只是等待直到通知。

如果你的目標是避免等待,當你wait值爲零,你可以添加一個條件:

if (wait > 0) { 
    synchronized (monitor) { 
     try { 
      monitor.wait(wait); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

@Vulvan感謝您的快速反應 – Ravisha

1
Object.wait(0); 

只會讓它永遠等待。所以,你可以嵌入代碼的if條件內,

if(wait>0) 
{ 
//your code 
} 
相關問題