ash*_*aka 5 java concurrency multithreading exception-handling
在 Brian Goetz关于如何处理 InterruptedException的文章中,有一段很突出:
吞下中断是可以接受的一次是当您知道线程即将退出时。这种情况只发生在调用可中断方法的类是线程的一部分而不是 Runnable 时。
我不明白这个。原因是否与 Runnable 可能由线程池处理而 Thread 是您自己开始的事情有关?
我认为扩展Thread是没有必要的,因此实施Runnable是首选。
但重要的是代码知道线程将要退出。如果您的代码是某些通用回调接口的一部分,那么您将无法知道您是如何被使用的。您可以被传递到线程池(事实上,我们可能应该使用池而不是Thread在代码中不适当的点构造 s)。OTOH,通常Runnable是一个匿名内部类,因此,在源代码级别,它是确实知道发生了什么的封闭方法的一部分。
因此,如果线程即将退出,重置当前线程的中断状态是没有意义的,因为没有什么可以中断。
在某些时候,你会想说它已经足够中断了。例如,即使任务被中断,线程池也可以继续使用线程,尽管它们可能希望InterruptException为尝试接取任务的调用者保留线程。
库通常不能正确处理中断。IMO,中断没有有意义的上下文。没有他们,生活会简单得多,不幸的是他们让人们感觉到了他们的存在。
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |