java - 如何在tomcat关闭时销毁预定线程?

标签 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 在关闭时清理这个额外的线程。 Listener 在单独的程序中运行,所以它让我有点卡住了。

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

TIA

最佳答案

代替

ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);

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

ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1, threadFactory);

您的线程工厂应该生产作为守护进程的线程,因此在关闭时这些线程会自动死亡。你可以使用你自己的工厂或者简单地使用 guava 的 ThreadFactoryBuilder .

关于java - 如何在tomcat关闭时销毁预定线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16294937/

相关文章:

java - 在Windows机器上获取手动设置的时区

java - 无论焦点是什么 JComponent,如何为 JFrame 进行键绑定(bind)?

java - 从 Java EE 调用 Groovy 类 + 添加到 jsp

maven - tomcat打不开sjsxp-1.0.2.jar

c# - 计划任务时间约束

java - 如何在 spring 数据中使用 elemMatch 为嵌套对象从 mongodb 检索数据

apache - 如何在 ProxyPass 中使用与 Tomcat 上下文名称不同的路径名称

tomcat - 如何在 LDAP 中使用身份验证设置 Tomcat?

asp.net-mvc - 安排每周执行一次的 Quartz.NET 触发器

windows-server-2008 - 计划任务返回 0x080070532