gpt4 book ai didi

java - 如何处理不停止线程的行为不当的库

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:22 25 4
gpt4 key购买 nike

当第三方库在库关闭时无法正确清理线程时,有哪些解决方法?

许多库为其中包含的代码显式或隐式公开生命周期方法。例如,Web 应用程序框架存在于 servlet 容器中的 Web 应用程序上下文中。创建上下文时,由于各种原因,框架可能会启动一些线程。

现在,进一步举这个例子,当 servlet 容器或 Web 应用程序上下文关闭时,Web 应用程序框架应该终止所有这些线程。 ExecutorService由库创建的 s 应该被关闭,或者应该制定其他一些停止这些线程的方法。

最坏的情况是线程是non-daemon threads .这些实际上会停止 Java 进程的终止。但即使它们是守护线程,允许线程继续运行也可能是不好的做法。如果(回到示例中)servlet 容器嵌入到其他代码中,其他代码可能会继续运行,而线程仍在运行,这可能会导致问题。

没有公开的编程方式来停止这些线程,那么可以做什么呢?

如果你正在使用这样的第三方库,有什么方法可以强制关闭现有线程?

最佳答案

If you are using such a third party library, what are the ways to force existing threads to be shutdown?

一般来说,没有一种安全的方法可以保证在所有情况下都有效。最接近安全解决方案的方法是使用 ThreadGroup 枚举所有现有线程,并使用 Thread.interrupt() 告诉每个线程停止.当然,不能保证线程会注意,或者它们会干净地关闭以响应中断。

IMO,最好的策略是:

  • 如果不需要干净地关闭线程,则通过调用 System.exit() 拔掉 JVM 的插头

  • 如果需要彻底关闭线程以避免损坏的可能性,则不要使用该库...或自行解决问题。

关于java - 如何处理不停止线程的行为不当的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902205/

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