我使用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
答案 0 :(得分:2)
而不是
ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);
使用带有线程工厂的构造函数
ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1, threadFactory);
您的线程工厂应该生成作为守护进程的线程,因此在关闭时这些线程会自动死亡。您可以使用自己的工厂或只使用番石榴ThreadFactoryBuilder。