服务器启动几小时后,ThreadPoolExecutor自动关闭

时间:2018-08-03 11:56:27

标签: multithreading threadpool java.util.concurrent threadpoolexecutor

我创建了一个ThreadPoolExecuter,其corePool大小为10,最大池大小为50,工作队列为100,在本地计算机上一切正常,但是在开发服务器(Linux计算机)上,线程池活动了几个小时然后自动关闭。

所以在那之后所有新任务都被拒绝了。

我们分配给该线程池的任务的超时时间为25秒。

我们也有多个ThreadPool,但是当我们关闭服务器时它们会关闭。

private static ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(100);

ThreadFactory threadFactory = getNamedTreadFactory(false, "Thread-01");

xecutorService es = new ThreadPoolExecutor(10, 50, 3, TimeUnit.SECONDS, workQueue, threadFactory, handler);

1 个答案:

答案 0 :(得分:0)

此问题背后的原因是我们拥有侦听上下文活动的ServletContextListner实现。因此,当在DEV服务器上的代码被推送时,应用程序将被热部署,并且应用程序上下文将被重新创建,这一次它正在关闭池。

public class ApplicationContextListner implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    //Here the pool shutdown code was present - so we removed it 
}}

在从destroy方法中删除池关闭调用之后,它起作用了。

问题已解决。