1

我正在使用 ScheduledExecutorService 来调度线程。我想知道当 JBoss 关闭时会发生什么?它会杀死服务器内启动的所有线程,包括我安排的线程吗?我是否必须使用 ScheduledFuture 手动执行此操作,并在 ServletContext 被销毁时取消线程?

4

1 回答 1

1

有两种方法:

  • java.util.concurrent.ExecutorService.shutdown()
  • java.util.concurrent.ExecutorService.shutdownNow()

JBoss 不会调用任何这些,除非您在关闭时调用的方法中执行此操作。对于 Web 应用程序,您有机会在javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).

当然这是 JavaEE/Servlets 方式。您可以使用例如 Spring Framework 将其隐藏。通过创建 org.springframework.scheduling.concurrent.ThreadPoolTask​​Scheduler 您将免费关闭(此类实现org.springframework.beans.factory.DisposableBean)。请参阅此处的详细信息。

于 2013-05-16T04:50:00.790 回答