我在運行多個Java線程的應用程序中遇到了一些問題。 應用程序運行多個工作線程,在輸入隊列中持續查看,如果隊列中有消息,則將它們拉出並處理它們。CPU負載中的Java多線程
在這些工作線程中,還有另一個驗證線程計劃在固定的時間段執行一次檢查,以查看主機(運行應用程序的主機)是否仍然處於「良好狀態」以運行應用程序。此線程更新一個AtomicBoolean
的值,然後在工作線程開始查看主機是否正常之前,該值被驗證。
我的問題是,在CPU負載過高的情況下,負責驗證的線程將花費更長時間,因爲它必須與所有其他線程競爭。如果AtomicBoolean
在一段時間後沒有得到更新,它會自動設置爲false,導致我產生一個令人討厭的瓶頸。
我最初的方法是增加驗證線程的優先級,但更深入地挖掘它我發現這不是一個有保證的行爲,算法不應該依賴線程優先級來正確運行。
任何人有任何其他的想法嗎?謝謝!
爲我們提供一些代碼 – Andremoniy 2013-02-26 14:23:18
通常,優先級不應影響正常運行,但這似乎是一個優化問題。假設驗證線程的CPU負載較低,並且工作人員需要更多的CPU,請給予他們較低的優先級。此外,請確保您的原子的超時設置不會太低。 – 2013-02-26 14:27:18
再次:向我們展示您的「驗證線程」的源代碼。 – Andremoniy 2013-02-26 14:47:38