Java线程与InterruptedException
这个是Java中的一种异常,表示“被中断”,由于它是一个“checked exception”,所以在可能产生这种异常的场合下,你必须处理它。我一般看到的代码都是将之catch之后,什么也不做,为了确认这样的处理是否合适,找了一些资料来看,IBM Developerworks上的这篇文章做了比较详细的解释。
Java的线程都有一个interrupt标志,线程在运行时,如果别的线程想中断这个线程的运行(通过调用Thread.interrupt),会出现几种情况:
- 当线程处于可以打断的阻塞状态,比如
Thread.sleep()和Object.wait(),这时就会触发InterruptedException这个异常了,调用者必须处理一下这个异常,通常就是清理工作喽,或者继续往上抛,由调用者去决定后续的动作。 - 当线程处于其它状态,比如努力干活,或虽然阻塞但不能被中断(比如一些IO操作),这时线程的中断状态位会被置位,剩下的事情就依赖线程自己的处理了,也就是说线程需要自己抽空来看这个标志位,如果不看的话,别人就没法打断你的运行了。
更多的细节,据说在《Java Concurrency in Practice》书中有详细的讲解(Amazon上5星哦),有些想看看,记得在书店应该是有中文版的《Java并发编程实践》,周末去看一看。
相关文章