我目前正在對軟件進行各種性能改進。因為它使用 SWT 作為它的 GUI,所以我遇到了一個問題,在某些情況下,在顯示線程中創建了很多 UI 元素。由于我之前的人并沒有真正注意在顯示線程之外進行任何計算,因此整個軟件在啟動時可能會無響應幾秒鐘。我現在已經隔離了需要在 Display Thread 中執行的代碼,現在我正在計算 Runnables 中提交給固定 Threadpool 的所有其他內容。我正在像這樣使用游泳池:public abstract class AbstractChartComposite {private static ExecutorService pool = Executors.newFixedThreadPool(8);private List<String> currentlyProcessingChartItems = new ArrayList<>();protected void doCalculate(constraints){for (IMERuntimeConstraint c : constraints) { if(!currentlyProcessingChartItems.contains(c.getId())){ currentlyProcessingChartItems.add(c.getId()); pool.submit(new Runnable(){ @Override public void run() { try{ createChartItem(c); currentlyProcessingChartItems.remove(c.getId()); }catch(Throwable e){ e.printStackTrace(); } } }); } }}}我現在想知道,一旦創建了所有 UI 元素,讓線程池閑置運行是否有任何缺點。我不能真正關閉它以進行垃圾回收,因為當需要創建新元素時,用戶輸入將再次需要它。那么在沒有提交的 Runnables 運行的情況下留下線程池有什么主要缺點嗎?
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
不,沒有缺點。
線程不會真正運行,它們將被停放,直到提交新任務。所以它不影響CPU。你還說你會再次使用這個池,所以在你的情況下沒有必要關閉它并再次重新創建。
至于內存 - 是的,空閑線程會消耗一些內存,但這也不是問題,直到你有數百(數千?)線程。
另外,一個建議。不要做過早的優化。那是萬惡之源。一旦遇到真正的性能問題,就可以使用特殊實用程序分析問題并檢測瓶頸。
添加回答
舉報
0/150
提交
取消