2013-05-16 128 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