我一直在阅读有关InterruptedException的内容,并且很明显,没有在所有情况下都能正确处理它的灵丹妙药.
我还没有看到的是一些示例代码,演示了如果异常处理不当会导致什么错误.当然,我意识到有些效果(例如线程饥饿,我认为是其中之一)很难证明.我想将其限制为演示Thread.sleep()的正确使用.
您将如何为此设计一个比较实际的示例程序?
到目前为止,这是我的想法:
>创建一个简单的GUI应用程序以演示响应速度的降低.有一个UI线程和一个简单的线程池来执行一些阻止任务.线程池管理器检查正在运行的线程的中断状态以对其进行管理. Swallowed InterruptedExceptions导致池用完线程,因此应用程序的响应速度变慢.
这可以帮助指出在托管线程和非托管线程中休眠时的不同处理策略.
>有一堆线程会造成垃圾和睡眠.线程有两种类型:一种在中断时恢复中断状态的线程,另一种不(吞下异常)的线程.然后,演示将在内存很少的JVM中运行该应用程序,并且(有希望地)表明吞下该异常会以某种方式抑制垃圾收集或增加其开销(由于调用之间的间隔较长).
这些想法有意义吗?还有其他(也许更简单)的想法吗?
最佳答案
假设您有一个想要中断的线程可以关闭.
public void run() {
while(!Thread.currentThread().interrupted()) {
doWork();
callMethodWhichIgnoresInterrupted();
}
}
通过丢弃该中断,您可以拥有一个线程,该线程有时无法死亡,从而导致资源泄漏,您必须在不重新启动应用程序的情况下才能解决该泄漏.
忽略任何异常是95%的情况下非常糟糕的主意.这就是为什么它们在Java中被检查为异常.这些问题不仅限于中断.
Inm小程序商店
Inm小程序商店收录了最新,最热门的微信小程序和微信小游戏,是国内内容最丰富的集小程序游戏、小程序分发、小程序推广为一体的综合性小程序门户网站之一。
Vultr中文网
最低 $2.5/月 的VPS, 稳定, 可靠