我创建了一个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);
答案 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方法中删除池关闭调用之后,它起作用了。
问题已解决。