- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当第三方库在库关闭时无法正确清理线程时,有哪些解决方法?
许多库为其中包含的代码显式或隐式公开生命周期方法。例如,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/
我正在编写一个 native iOS 7 应用程序,需要从 JSON api(由我控制)检索数据。 JSON 输出示例如下: { "id" : "544", "name" : "1900 Green
我是一名优秀的程序员,十分优秀!