2014-02-28 54 views
0

我使用org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor來執行我的應用程序任務。我想限制某些數目的並行運行任務(線程)的數量,直到完成所有(或正在運行的任務的某個百分比)線程完成後才執行新線程。如何控制ThreadPoolTask​​Executor中正在運行的線程數量?

如何控制或如何獲取信息?ThreadPoolExecutor實際運行多少個線程來控制執行新任務?有什麼辦法如何通過ThreadPoolExecutor解決它,或者我需要這樣做註冊新的線程開始和線程完成時註銷...?

+0

「或某個百分比的」< - 你是什麼意思?不是'Executors.newFixedThreadPool()'符合你的需求嗎? – fge

+0

我的意思是開始新的任務/線程,例如當20%的先前啓動的線程完成時。 – user2148736

回答

1

您可以使用getActiveCount()獲取當前的線程數,並使用setCorePoolSize()來設置核心池大小。您應該在您的ThreadPoolTask​​Executor配置中設置池大小。但是,我不認爲等到所有線程都完成之後纔開始新線程,那麼您應該如何使用線程池。

+0

我想我需要控制它,因爲有非常大量的任務(成千上萬),我可以殺死或消耗所有服務器資源(但我沒有測試過它)。有沒有更好的方法來避免這種情況? – user2148736

+0

如果您只想在20%完成時開始新任務(例如,初始值爲100),則從一開始將setCorePoolSize設置爲80。它會限制你想要的線程。 – Tautvydas

相關問題