在spring中创建ThreadPoolExecutor会导致内存泄漏吗?

时间:2018-04-10 17:10:31

标签: java spring multithreading

我正在使用Spring,在RequestMap方法中我有如下代码:

@RequestMap
public void someMethod() {
    ThreadPoolExecutor executor = Executors.newFixedThreadPool(N);
    executor.submit(new Runnable());
    executor.submit(new Runnable());
}

然后,即使每个Runnable应该在几秒钟内完成,我仍然会收到OOM错误。在分析堆转储后,我发现有数千个Thread个对象。

然后我使用executorExecutors.newCachedThreadPool更改为singlton,此问题已修复。

据我所知,在返回的方法之后,没有对线程池的引用,所以它应该被垃圾收集,但事实是线程仍在堆上。为什么呢?

1 个答案:

答案 0 :(得分:0)

是的,这会泄漏内存。 As it says in the documentation

  

应关闭未使用的ExecutorService以允许回收其资源。

关闭执行程序(executor.shutdown()),或重复使用它。