interrupt()
只是改变中断状态而已.
in terrupt()
不会中断一个正在运行的线程。这一方法实际上完成的是,给受阻塞的线程抛出一个中断信号,
这样受阻线程就得以退出阻塞的状态
。更确切 的说,如果线程被
Object.wait,
Thread.join
和
Thread.sleep
三种方法之一阻塞, 那么,它将接收到一个
中断异常
(
InterruptedException
),从而
提早地终结被阻塞状态
。
如果线程没有被阻塞,这时调用 interrupt() 将不起作用;否则,线程就将得到 InterruptedException 异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
线程A 在执行 sleep , wait , join 时, 线程B 调用线程A的 interrupt 方法,的确这一个时候A会有 InterruptedException 异常抛出来.
但这其实是在 sleep,wait,join 这些方法内部会不断检查中断状态的值,而自己抛出的 InterruptedException 。
如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态
,所以线程A不会抛出 InterruptedException ,而会一直执行着自己的操作.
当线程A终于执行到 wait(),sleep(),join() 时,才马上会抛出 InterruptedException.
若没有调用sleep(),wait(),join()这些方法,即没有在线程里自己检查中断状态自己抛出InterruptedException的 话,
那InterruptedException是不会被抛出来的.
这样受阻线程就得以退出阻塞的状态
如果线程没有被阻塞,这时调用 interrupt() 将不起作用;否则,线程就将得到 InterruptedException 异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
线程A 在执行 sleep , wait , join 时, 线程B 调用线程A的 interrupt 方法,的确这一个时候A会有 InterruptedException 异常抛出来.
但这其实是在 sleep,wait,join 这些方法内部会不断检查中断状态的值,而自己抛出的 InterruptedException 。
如果线程A正在执行一些指定的操作时如赋值,for,while,if,调用方法等,都不会去检查中断状态
,所以线程A不会抛出 InterruptedException ,而会一直执行着自己的操作.
当线程A终于执行到 wait(),sleep(),join() 时,才马上会抛出 InterruptedException.
若没有调用sleep(),wait(),join()这些方法,即没有在线程里自己检查中断状态自己抛出InterruptedException的 话,
那InterruptedException是不会被抛出来的.