【问题标题】:What happens to sleeping threads when container shuts down?当容器关闭时,休眠线程会发生什么?
【发布时间】:2011-11-09 22:11:44
【问题描述】:

假设

运行 Web 应用程序的 tomcat 容器。

触发 tomcat 关闭命令。

在我的情况下,tomcat 容器不会关闭,因为在触发关闭命令后仍有任务线程。

【问题讨论】:

  • 如果容器停止,那么显然线程甚至不再存在。 Java 线程无法在其 JVM 中存活。
  • 在我的情况下发生的事情是正在休眠的线程不允许我的 tomcat 容器停止。
  • 这是有道理的。下次我会尝试写更精确的问题。
  • @JBNizet:这不适用于您在 JSP/Servlet 代码中完全自行创建和管理的非守护线程。在 Java EE 容器中这是一个非常糟糕的主意。

标签: java multithreading tomcat concurrency


【解决方案1】:

除非 Tomcat 中有我不知道的魔法(可能),否则问题可能是您的睡眠线程不是守护线程。一旦启动 JVM 关闭(通过外部 HUP/INT/TERM 信号,或System.exit 或任何其他方式),JVM 将等待,直到所有非守护线程正常完成。您需要安排您的睡眠线程有序关闭,或在创建它们时设置daemon=true

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2015-10-09
    • 2015-03-25
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2020-05-05
    相关资源
    最近更新 更多