Jconsole活动线程计数和java ExecutorService

时间:2012-07-06 17:00:02

标签: java executorservice jconsole

在一段时间内使用JConsole监控我们的应用程序显示“实时线程”计数不断增加。增加线程数对我来说听起来不好,或者我错了?

梗概: 在我们的应用程序中,我们使用Executors.newFixedThreadPool,Executors.newSingleThreadScheduledExecutor为各种收集器创建线程池。这些收藏家每隔几分钟就会被召集一次。 并且在每次收集期间还有上述收藏家称之为n次的其他服务。此服务生成一个执行FutureTask的线程(Executors.newFixedThreadPool(1);)。对于上述所有ExecutorServices,只有在捕获到异常时才会调用shutdownNow(),剩下的就是GC。

1)我是否需要在流程完成后关闭执行程序,还是可以依赖GC?

感谢您的建议和见解 Ajju

2 个答案:

答案 0 :(得分:1)

应该在执行者服务上明确地​​调用shutdown - executor.shutdown()以便有序关闭&资源回收(旧任务在不接受新任务时执行)。

shutdownNow()尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表(不保证执行任务 - 它们可能执行也可能不执行 - 这是最好的尝试。)

答案 1 :(得分:1)

线程池的目的是避免在处理过程中产生新线程的开销。你不应该产生新的线程! (这是你在这里做的Executors.newFixedThreadPool(1);

您应该在应用程序启动时设置线程池,并将它们注入到处理对象中。