【问题标题】:How to check if thread is killed or keep running when you stop the tomcat Server?停止tomcat服务器时如何检查线程是否被杀死或继续运行?
【发布时间】:2016-07-04 21:12:22
【问题描述】:

我有一个由 10 个线程组成的线程池来处理某些任务,它们一直在我的 Tomcat 服务器的 Web 应用程序中运行。 我正在使用 ExecutorService 创建线程池,如下所示。

ExecutorService executor = Executors.newFixedThreadPool(10);

在没有执行executor.shutdown()的情况下停止tomcat服务器后,这些线程会被杀死还是继续运行?

谢谢。

【问题讨论】:

  • 配置 newFixedThreadPool(10) 是在哪里做的?

标签: java multithreading jsp servlets


【解决方案1】:

正如其他人所提到的,如果您执行 tomcat 关闭,它将终止您的线程。

但是,根据您的评论,您正试图优雅地终止您的线程。所以我认为你需要在ServletContextListener 中实现你的关闭逻辑并使用 contextDestroyed 方法。

【讨论】:

    【解决方案2】:

    当 Tomcat 关闭时,所有剩余的线程也将被终止。您的线程池可能会阻止 tomcat 正常关闭。最终,该进程可能会被运行 Tomcat 的脚本杀死(因此,这取决于您如何启动/关闭 Tomcat)。

    【讨论】:

    • '这取决于你如何启动/关闭你的 Tomcat' 你能解释一下吗?我正在使用 Apache-tomcat-6.0.44\bin 的 shutdown.bat 文件将其关闭。
    • 您目前的经验是什么?当你运行shutdown.bat ...它会挂在那里吗?
    • 它没有挂起但是如何确保这些线程被优雅地杀死?
    【解决方案3】:

    并不总是建议在 Web 容器中创建线程,因为它们不会让容器正常关闭。您应该使用托管线程池,如果您想访问其他容器的托管资源(例如 EJB),它们也会很有用。

    Explanation here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2018-06-08
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多