2012-08-06 27 views
1

ScheduledExecutorService似乎有一個問題,即如果無法獲得空閒線程,則週期性任務將延遲發生。不幸的是,對我來說,分配給它的週期性任務確實需要按計劃進行。目前它每分鐘計劃一次,但有時由於應用程序忙於其他事情(我認爲這是爲什麼),它不能在五分鐘內完成,而五分鐘恰好是「主要生產錯誤」閾值。在Java應用程序中強制定期執行週期性任務

如何通過優先排序或以其他方式控制線程平衡器來強制執行此操作?

+0

用於任何東西,但你的ScheduledExecutorService的任務?你的任務總是在不到1分鐘內運行? – assylias 2012-08-06 22:16:08

+0

沒有足夠的信息。你怎麼實際上調度線程?顯示一些代碼。 – 2012-08-06 22:16:42

+0

@assylias - 賓果。還有一項任務需要花費很長時間,而且我的程序只能使用一個線程,所以我可以避免一些併發編碼問題。我可以通過將其移動到單獨的執行器服務來解決。您可以將此作爲答案發布,我會接受,因爲他們確實有兩個要問的問題。 – djechlin 2012-08-06 22:18:43

回答

2

如果您的ScheduledExecutorService用於其他任務,或者您的任務有時需要超過1分鐘才能運行,則可以簡單地增加ScheduledExecutorService中可用的線程數。所以如果一個任務沒有完成,執行者仍然可以運行一個新任務。

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10); 

(我挑10個隨機 - 如果你運行你的任務每分鐘,它可以長達5分鐘運行一次,留下你的錯誤一定餘量)

相關問題