我正在使用一个池大小为1的SchedulerExecutorService,如下面的代码所示
private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
并调用scheduleAtFixedRate方法
testConnectionHandle = scheduler.scheduleAtFixedRate(testConnection, DELAY, PERIOD, TimeUnit.SECONDS);
其中DELAY = 30且PERIOD = 60。
此SchedulerExecutorService在ServletContextListener的contextInitialized方法中启动。
我正在发送一条带有线程名称的日志消息,他第一次启动应用程序我名字是pool-1-thread-1,第二次我重新启动线程名称是pool-2- thread-1,第三次是pool-3-thread-1,第四次是我得到以下异常
SEVERE: WSSERVLET11: failed to parse runtime descriptor: java.lang.OutOfMemoryError: PermGen space
在listener的contextDestroyed方法中,我有以下代码
testConnectionHandle.cancel(true);
scheduler.shutdownNow();
我假设创建的线程池永远不会被破坏,也许我有内存泄漏问题。
我正在使用Tomcat 7.0.42
有人可以帮我解决这个问题吗?