2014-01-23 75 views
0

當我在一個while循環中包含Thread.wait()時,我的IDE(NetBeans)告訴我這可能會導致性能問題,它如何以及它是否有繞過它的方式?Java Thread.wait()警告

例子:

while (timing){ 
     Thread.wait(10); 
     foo++; 
     } 
    //Started in a seperate thread before activating. 

編輯:感謝您的幫助,我會嘗試使用 'ScheduledExecutorService的',而不是!

+0

同一問題在這裏:http://stackoverflow.com/questions/3956512/java-performance-issue-with-thread-sleep – NickL

+0

給更多的背景,很難說如果它會更好地睡覺或等待沒有更多的信息.​​.. – assylias

+0

Class'Thread'沒有靜態方法'wait'。我希望你沒有聲明一個名爲'Thread'的變量。我們是在談論相同的'java.lang.Thread'還是你的Thread另一個類? –

回答

0

您可能只想製作線程sleep,這就是您需要調用的方法的名稱。

你叫Object#wait(),這是一個線程協調方法,並且你使用了一個明確的超時(一個相當短的)。我的猜測是,NetBeans警告你有關超時,因爲通常我們使用Object#wait沒有超時,如果我們使用超時,我們不會在一個循環中wait

現在,NetBeans還會在循環中警告您使用Thread.sleep(),因爲通常情況下,如果要安排重複任務(即您正在執行的操作),您將使用ScheduledExecutorService。該服務能夠爲您的應用程序提供大量不同的計劃任務,全部使用單個線程。在一個循環中明確寫入Thread.sleep()不必要地佔用整個線程(一個重量級的系統資源)什麼也不做,只能在大部分時間進入休眠狀態。