java – 如何处理不停止线程的行为不当的库
|
在处理关闭库时未正确清理线程的第三方库时,有哪些解决方法? 许多库为其中包含的代码公开或隐式地公开生命周期方法.例如,Web应用程序框架存在于servlet容器中的Web应用程序上下文中.创建上下文时,由于各种原因,框架可能会启动某些线程. 现在,进一步举例说明,当关闭servlet容器或Web应用程序上下文时,Web应用程序框架应该终止所有这些线程.应该关闭库创建的ExecutorService,或者应该制定一些其他停止这些线程的方法. 最糟糕的情况是线程是non-daemon threads.这些实际上会停止Java进程的终止.但即使它们是守护程序线程,允许线程继续也可能是不好的做法.如果(回到示例)servlet容器嵌入在其他代码中,其他代码可能会继续运行,线程仍在继续运行,这可能会导致问题. 没有以编程方式暴露这些线程,所以可以做些什么? 如果您正在使用这样的第三方库,那么强制关闭现有线程的方法有哪些? 解决方法
一般来说,没有安全的方法可以保证在所有情况下都能正常工作.您最接近安全解决方案的方法是使用ThreadGroup枚举所有现有的Threads,并使用Thread.interrupt()告诉每个线程停止.当然,不能保证线程会注意,或者它们会在响应中断时干净地关闭. IMO,最好的策略是: >如果线程不需要干净地关闭,那么通过调用System.exit()来拔出JVM上的插件>如果线程需要干净地关闭以避免损坏的可能性,那么不要使用库…或自己解决问题. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – EasyMock中Mockito.spy/doReturn的类比是什么?
- Java中EnumMap代替序数索引代码详解
- java – 静态最终字段,静态字段和性能
- SpringMVC适配器模式代码示例
- java – 确定一个方法是否覆盖使用反射的另一个?
- java – 如何访问传递给CompletableFuture allOf的已完成期
- compiler-construction – 将抽象语法树转换为字节代码
- java – 为什么我不能访问我的面板的getWidth()和getHeight
- Java:如何在相应的一周内对所有Java日期进行分组?
- android中判断sim卡状态和读取联系人资料的方法
