繁体   English   中英

缺陷固定线程池的缺点

[英]Drawbacks to an idling fixed threadpool

我目前正在对软件进行各种性能改进。 由于它使用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元素,如果让Threadpool在空闲状态下运行有任何缺点。 我无法真正关闭垃圾收集,因为当需要创建新元素时,将再次需要用户输入。 离开线程池没有提交运行的Runnables有什么主要缺点吗?

不,没有缺点。

线程将不会实际运行 ,它们将被停放,直到提交新任务。 所以它不会影响CPU。 另外你说你将再次使用这个池,所以在你的情况下,没有必要关闭它并重新创建。

至于内存 - 是的,空闲线程会消耗一些内存,但这也不是问题,直到你有数百(数千?)个线程。

另外,一条建议。 不要做过早的优化。 这是万恶之源。 一旦遇到真正的性能问题,使用特殊实用程序并检测瓶颈,就可以分析问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM