目前我有一個構造執行以下操作:
An X
線程數(X
是來自用戶的可配置變量)都已啓動並等待任務變爲可用。等待 a BlockingQueue
的線程block
。
另一個線程將任務放置在阻塞隊列中,被阻塞的線程執行任務並返回wait
進行下一個任務。
無論如何,這工作正常,但我有以下問題。即使沒有任何2小時,線程也會不斷地等待任務。
另外X
線程實際上是可用的,即使只有讓我們的X/50任務進入(即我有比我實際需要更多的線程)。
所以我的問題是,我怎麼能重構這個(也許使用Executors
),以便X
根據需要上升和下降?
我的目標不是失去表現。我的意思是現在我可以擁有比我需要的更多的線程(浪費資源),但我沒有創建新線程的開銷。
我有興趣重構這種方式,不要浪費資源並保持相同的性能水平。我該如何整合執行者?或者我怎麼能改善這個線程池?
0
A
回答
1
正常ThreadPoolExecutor應該就足夠了。基本構造函數爲「核心池大小」(最小線程總數保持活躍),最大大小(最大線程數量)和超額線程保持活動時間(空閒線程超過核心池大小)提供參數。此外,您可以直接將執行者的BlockingQueue傳遞給執行者。
0
嘗試使用CachedThreadPool
,這將不僅回收,但在需要時創建新的線程..
2.而最真棒功能CachedThreadPool
是當線程在60秒內沒有被激活,所以不會造成資源浪費。
0
您的用例已在ExecutorService.newCachedThreadPoolExecutor中實現。無論如何,我想繼續執行你可以做各種事情來獲得靈活的線程池。
我將列出一個這樣的可能性
- 寫一個主線程持有的隊列和工作單位(任務)分配給各個線程,而且它保持它的線程運行,已經返回結果單位並阻止哪些線程。使用這些信息,您的主線程可以在需要時輕鬆地負載均衡和創建/銷燬線程(從屬)。
相關問題
- 1. 我該如何改善這個循環?
- 2. 更適合我的任務:後臺工作者或線程池?
- 3. 我怎麼能執行這個MySQL partitoning?
- 4. 我該怎麼做才能改善我的測試?
- 5. 我該怎麼做才能停止線程執行?
- 6. 我怎麼能結合這些線路
- 7. 尋找方法來改善這個代碼,或者如果有什麼我不應該做的
- 8. 我應該如何改善這個C++代碼的性能?
- 9. 我怎麼能爲了選擇行或者
- 10. 執行者或與池構造
- 11. 我怎麼能在Git中做分支或者什麼東西
- 12. 我該如何使這個主要發現者並行工作
- 13. 我應該如何做這個動畫或者我該如何解決這個困境?
- 14. 我怎麼能改寫這個2008
- 15. 工作者線程池
- 16. 我怎樣才能改善這個存儲過程的性能呢?
- 17. 我怎麼能由流行線程laravel
- 18. 作爲DSP編程初學者,我該怎麼做?
- 19. Redis:我應該怎樣(或者應該)刪除pubsub頻道
- 20. ASP.NET MVC 2路由不能正確解析(或者說,我應該怎麼看)
- 21. 我該怎麼辦;如果var是整數然後執行
- 22. 開發一個互聯網使者我應該怎麼做?
- 23. 如何複製只有值不使用引用,或者我該怎麼處理這個內部列表引用?
- 24. 我怎樣才能縮短這個譯者腳本?
- 25. 我應該在我的查詢中執行方程式,或者在本地執行方程式並更新db
- 26. 我應該怎麼做才能修復這個程序?
- 27. 我怎麼能整合與angular.js
- 28. 我如何修改這個sql執行?
- 29. 我該怎麼稱呼這種行爲?
- 30. 我怎樣才能改善這種LinqToEntities GROUPBY查詢
取決於OP在做什麼,他可能需要對線程的最大數量設置限制 – assylias 2012-08-05 10:44:19
但是,我如何整合這個?在'CachedThreadPool'中,你提交'Runnables'吧?現在我有'線程'等待在隊列中。我將如何從一個設計走向另一個? – Cratylus 2012-08-05 10:44:33
@ user384706:一個'Thread'實現'Runnable' – 2012-08-05 10:57:25