0

目前我有一個構造執行以下操作:
An X線程數(X是來自用戶的可配置變量)都已啓動並等待任務變爲可用。等待 a BlockingQueue的線程block
另一個線程將任務放置在阻塞隊列中,被阻塞的線程執行任務並返回wait進行下一個任務。
無論如何,這工作正常,但我有以下問題。即使沒有任何2小時,線程也會不斷地等待任務。
另外X線程實際上是可用的,即使只有讓我們的X/50任務進入(即我有比我實際需要更多的線程)。
所以我的問題是,我怎麼能重構這個(也許使用Executors),以便X根據需要上升和下降?
我的目標不是失去表現。我的意思是現在我可以擁有比我需要的更多的線程(浪費資源),但我沒有創建新線程的開銷。
我有興趣重構這種方式,不要浪費資源並保持相同的性能水平。我該如何整合執行者?或者我怎麼能改善這個線程池?

回答

1

正常ThreadPoolExecutor應該就足夠了。基本構造函數爲「核心池大小」(最小線程總數保持活躍),最大大小(最大線程數量)和超額線程保持活動時間(空閒線程超過核心池大小)提供參數。此外,您可以直接將執行者的BlockingQueue傳遞給執行者。

0

嘗試使用CachedThreadPool,這將不僅回收,但在需要時創建新的線程..

2.最真棒功能CachedThreadPool當線程在60秒內沒有被激活,所以不會造成資源浪費。

+0

取決於OP在做什麼,他可能需要對線程的最大數量設置限制 – assylias 2012-08-05 10:44:19

+0

但是,我如何整合這個?在'CachedThreadPool'中,你提交'Runnables'吧?現在我有'線程'等待在隊列中。我將如何從一個設計走向另一個? – Cratylus 2012-08-05 10:44:33

+1

@ user384706:一個'Thread'實現'Runnable' – 2012-08-05 10:57:25

0

您的用例已在ExecutorService.newCachedThreadPoolExecutor中實現。無論如何,我想繼續執行你可以做各種事情來獲得靈活的線程池。

我將列出一個這樣的可能性

  1. 寫一個主線程持有的隊列和工作單位(任務)分配給各個線程,而且它保持它的線程運行,已經返回結果單位並阻止哪些線程。使用這些信息,您的主線程可以在需要時輕鬆地負載均衡和創建/銷燬線程(從屬)。
相關問題