JAVA线程中断
中断机制
如果线程被interrupt,大概有这么几种情况。
-
1、如果线程堵塞在object.wait、Thread.join和Thread.sleep,将会清除线程的中断状态,并抛出InterruptedException;
-
2、如果线程堵塞在java.nio.channels.InterruptibleChannel的IO上,Channel将会被关闭,线程被置为中断状态,并抛出java.nio.channels.ClosedByInterruptException;
-
3、如果线程堵塞在java.nio.channels.Selector上,线程被置为中断状态,select方法会马上返回,类似调用wakeup的效果;
-
4、如果调用thread.interrupt()方法,仅仅是设置线程的中断状态为true。
中断的使用
中断是实现任务取消的最合理的方式。在广泛接受的编程规范,中断处理应该尽可能迅速。
一般而言,我们提供的库不应该捕获中断,而是应该直接抛出中断让调用者决定。