gpt4 book ai didi

java - 将java线程池中的线程设置为守护线程是否有任何问题

转载 作者:行者123 更新时间:2023-11-30 04:46:00 24 4
gpt4 key购买 nike

我正在启动一个java线程池ThreadPoolExecutor (具有核心池大小)位于 Weblogic 服务器 (WLS) 内。要正常关闭池,我需要在此池上调用 shutdown() 。但由于我无法控制的原因,我无法在此 WLS 中添加任何应用程序生命周期监听器,这意味着我没有任何关闭 Hook 来调用此方法。所以我正在考虑将池中的线程设置为守护线程,以便 WLS JVM 在关闭时不会等待这些线程完成。否则 JVM 不会正常关闭,因为池中的核心线程始终在运行。

将线程池中的线程作为守护进程有什么缺点吗?我了解守护线程,当JVM退出时,这些线程永远不会被正常清理,并且任何正在运行的东西都不会正常完成。此问题仅在关闭阶段出现。

在线程池中创建线程守护进程还有其他问题吗? (或者更好的方法)

最佳答案

鉴于您位于应用程序容器中,您可能希望按照 @mprabhat 的建议使用工作管理器。但如果您确实需要受您控制的线程,您仍然可以关闭它们。 WebLogic 通过关闭 Hook 实现其应用程序生命周期通知。并且该机制仍然可供您使用。您可以使用Runtime.addShutdownHook注册一个。不要忘记快速完成工作。 WebLogic有超时,所以关闭顺序基本上是:

  1. 请求关闭(通过 System.exit() 或发送到 JVM 进程的信号)。
  2. 您的关闭 Hook 和 WebLogic 的关闭 Hook 将执行。
  3. 一段超时后(我认为是 5-10 秒),WebLogic 的关闭 Hook 之一调用 System.halt()。
  4. 无论关闭 Hook 是否完成,JVM 都会终止。

关于java - 将java线程池中的线程设置为守护线程是否有任何问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com