什么是一个很好的示例程序来演示Thread.sleep()抛出的InterruptedException的不正确处理?

时间:2011-02-08 08:46:15

标签: java multithreading interrupted-exception

我一直在阅读有关InterruptedException的信息,很明显,在所有情况下都没有正确处理它的银弹解决方案。

我还没有看到,是一些示例代码演示了如果异常处理不当会出现什么问题。当然,我意识到一些效果(比如线程饥饿,我认为是其中之一)很难证明。我希望将其限制为证明正确使用Thread.sleep()

你会如何为此设计一个有点逼真的示例程序?

到目前为止,我的想法是:

  1. 创建一个简单的GUI应用程序来演示响应能力降低。有一个UI线程和一个简单的线程池来执行一些阻塞任务。线程池管理器检查正在运行的线程的中断状态以管理它们。吞下InterruptedException会导致池中的线程耗尽,因此应用程序的响应速度会降低。

    这可以帮助指出在托管线程和非托管线程中睡眠时的不同处理策略。

  2. 拥有一堆创建垃圾和睡眠的线程。会有两种类型的线程:在中断时恢复中断状态的线程,以及不中断线程的线程。例外)。然后演示将在具有少量内存的JVM中运行应用程序,并且(希望)显示吞下异常会以某种方式阻止垃圾收集或增加其开销(由于调用之间的间隔很长)。

  3. 这些想法有意义吗?还有其他(也许更简单)的想法吗?

1 个答案:

答案 0 :(得分:4)

假设你有一个你希望能够通过中断它来关闭的线程。

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

通过丢弃中断,您可以拥有一个有时无法死的线程,导致资源泄漏而无法在不重新启动应用程序的情况下解决。

95%以上的时间忽略任何异常都是一个非常糟糕的主意。这就是他们在Java中检查异常的原因。这些问题不仅限于中断。