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

前端之家收集整理的这篇文章主要介绍了java – 如何处理不停止线程的行为不当的库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在处理关闭库时未正确清理线程的第三方库时,有哪些解决方法

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

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

最糟糕的情况是线程是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枚举所有现有的Threads,并使用Thread.interrupt()告诉每个线程停止.当然,不能保证线程会注意,或者它们会在响应中断时干净地关闭.

IMO,最好的策略是:

>如果线程不需要干净地关闭,那么通过调用System.exit()来拔出JVM上的插件>如果线程需要干净地关闭以避免损坏的可能性,那么不要使用库…或自己解决问题.

猜你在找的Java相关文章