优雅地停止线程

时间:2013-05-16 04:31:23

标签: java multithreading jboss scheduled-tasks

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

1 个答案:

答案 0 :(得分: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