如果tomcat关闭,如何销毁预定的线程?

时间:2013-04-30 07:57:07

标签: java tomcat scheduled-tasks

我使用ScheduleThreadPoolExecutor创建了一个预定的代码调用,如下所示:

ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);      
stpe.scheduleAtFixedRate(new Updatey(), 0, 60, TimeUnit.MINUTES);

哪个运行一个简单的类:

class Update implements Runnable {
    public void run() {
        //update code here
}

我有一个ServletContextListener,它在关闭tomcat时调用一个方法并执行一些其他整理作业。但我不知道如何使用java来关闭这个额外的线程。监听器在单独的程序中运行,因此它让我有点卡住了。

有人知道如何在关闭时清理它吗?

TIA

1 个答案:

答案 0 :(得分:2)

而不是

ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);

使用带有线程工厂的构造函数

ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1, threadFactory);

您的线程工厂应该生成作为守护进程的线程,因此在关闭时这些线程会自动死亡。您可以使用自己的工厂或只使用番石榴ThreadFactoryBuilder