2013-05-16 130 views
1

我正在使用ScheduledExecutorService来调度线程。我想知道当JBoss关闭时会发生什么?它是否会终止服务器中启动的所有线程,包括我计划的线程?我是否必须使用ScheduledFuture手动执行此操作,并在销毁ServletContext时取消线程?优雅地停止线程

回答

1

有两种方法:

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

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

当然这是JavaEE/Servlets的方式。您可以使用例如Spring框架。通过创建org.springframework.scheduling.concurrent.ThreadPoolTask​​Scheduler,您将免费关闭(此类实现org.springframework.beans.factory.DisposableBean)。看详细here