有哪些合适的示例程序可以演示 Thread.sleep() 抛出 InterruptedException 时不当处理的情况?

3
我一直在研究InterruptedException,很明显,在所有情况下都没有银弹式的解决方案来正确处理它。
但我还没有看到过一些演示代码,展示如果不正确处理异常会出现什么问题。当然,我认识到一些影响(例如线程饥饿,我认为这是其中之一)很难演示。我想将其限制在演示正确使用Thread.sleep()的范围内。
你会如何设计一个相对真实的样本程序呢?
以下是我的一些想法:
1.创建一个简单的GUI应用程序以展示降低响应性。有一个UI线程和一个简单的线程池来执行某些阻塞任务。线程池管理器检查正在运行的线程的中断状态以管理它们。吞没InterruptedException会导致线程池耗尽线程,因此应用程序变得不够响应。
这可以帮助指出在受管理的线程与未受管理的线程中休眠时的不同处理策略。
2.有许多创建垃圾并休眠的线程。将有两种类型的线程:一种在中断时恢复中断状态,另一种则不会(吞没异常)。然后演示在内存较少的JVM中运行应用程序,并(希望)显示吞没异常会抑制垃圾收集或增加其开销(由于调用之间的时间间隔较长)。
这些想法有意义吗?还有其他(可能更简单)的想法吗?
1个回答

4

假设你有一个线程,你想通过中断来关闭它。

public void run() {
   while(!Thread.currentThread().interrupted()) {
       doWork();     
       callMethodWhichIgnoresInterrupted();
   }
}

通过丢弃中断,您可以拥有一个线程,有时会因无法死亡而导致资源泄漏,您无法在不重启应用程序的情况下修复它。
忽略任何异常95%以上的时间都是一个非常糟糕的想法。这就是为什么在Java中它们是已检查异常。这些问题不仅限于中断。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接