在处理库关闭时无法正确清理线程的第三方库时,有哪些解决方法?
许多库显式或隐式地为其中包含的代码公开生命周期方法。例如,Web 应用程序框架存在于 servlet 容器中的 Web 应用程序上下文中。创建上下文时,框架可能会出于各种原因启动一些线程。
现在,进一步举例,当 servlet 容器或 Web 应用程序上下文关闭时,Web 应用程序框架应该终止所有这些线程。应该关闭由库创建的ExecutorService,或者应该制定一些其他停止这些线程的方法。
最坏的情况是线程是非守护线程。这些实际上会停止 Java 进程的终止。但即使它们是守护线程,允许线程继续运行也可能是不好的做法。如果(回到示例)servlet 容器嵌入在其他代码中,其他代码可能会继续运行,而线程仍在运行,这可能会导致问题。
没有公开的编程方式来停止这些线程,那么可以做些什么呢?
如果您正在使用这样的第三方库,有什么方法可以强制关闭现有线程?