我目前正在對(duì)軟件進(jìn)行各種性能改進(jìn)。因?yàn)樗褂?SWT 作為它的 GUI,所以我遇到了一個(gè)問題,在某些情況下,在顯示線程中創(chuàng)建了很多 UI 元素。由于我之前的人并沒有真正注意在顯示線程之外進(jìn)行任何計(jì)算,因此整個(gè)軟件在啟動(dòng)時(shí)可能會(huì)無響應(yīng)幾秒鐘。我現(xiàn)在已經(jīng)隔離了需要在 Display Thread 中執(zhí)行的代碼,現(xiàn)在我正在計(jì)算 Runnables 中提交給固定 Threadpool 的所有其他內(nèi)容。我正在像這樣使用游泳池: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(); } } }); } }}}我現(xiàn)在想知道,一旦創(chuàng)建了所有 UI 元素,讓線程池閑置運(yùn)行是否有任何缺點(diǎn)。我不能真正關(guān)閉它以進(jìn)行垃圾回收,因?yàn)楫?dāng)需要?jiǎng)?chuàng)建新元素時(shí),用戶輸入將再次需要它。那么在沒有提交的 Runnables 運(yùn)行的情況下留下線程池有什么主要缺點(diǎn)嗎?
空閑固定線程池的缺點(diǎn)
函數(shù)式編程
2023-04-19 16:36:01