【发布时间】:2018-08-03 11:56:27
【问题描述】:
我创建了一个 ThreadPoolExecuter,corePool 大小 = 10,最大池大小 = 50,工作队列 = 100,在本地机器上一切正常,但在开发服务器(Linux 机器)上,线程池活动了几个小时然后自动关机。
所以在那之后所有的新任务都被拒绝了。
我们分配给这个线程池的任务有 25 秒的超时时间。
我们也有多个线程池,但是当我们关闭服务器时它们会关闭。
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);
【问题讨论】:
-
ThreadPoolExecutor不会自动关闭,只有调用shutdown或shutdownNow方法之一才能导致它。你确定那些在你的代码中没有被调用吗? -
谢谢@AlexandreDupriez!我得到了这个问题。在项目中的某个地方,我们调用了 shutdownnow 方法。并且这条线出现在 ServletContextListener 实现类中所以每当我们在开发服务器上推送一些代码时,Web 应用程序上下文都会重新创建,而在上下文销毁时,它会调用覆盖的 contextDestroyed(ServletContextEvent arg),然后调用 showdownnow 方法。 public void contextDestroyed(ServletContextEvent arg) { //这里存在池关闭代码 - 所以我们将其删除 } 再次感谢。问题已解决。
-
太好了 - 很高兴你找到了有罪的电话。
标签: multithreading threadpool java.util.concurrent threadpoolexecutor