我创建了一个corePool size = 10,Max Pool Size = 50,work Queue = 100的ThreadPoolExecuter,在本地机器上一切正常,但在开发服务器(Linux机)上,线程池活跃了几个小时,然后自动关闭。
所以在那之后,所有的新任务都被拒绝了。
我们分配给这个线程池的任务的超时时间是25秒。
我们也有多个ThreadPools,但当我们关闭服务器时,它们就会关闭。
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);发布于 2018-08-06 16:06:16
这个问题背后的原因是我们有监听上下文活动的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 method.It中删除池关闭调用后,它工作了。
问题已解决。
https://stackoverflow.com/questions/51672101
复制相似问题