首先,每个线程内部都有一个boolean型变量表示线程的中断状态,true代表线程处于中断状态,false表示未处于中断状态。
而interrupt()方法的作用只是用来改变线程的中断状态(把线程的中断状态改为true,即被中断)。
A线程调用wait,sleep,join方法,这时B线程调用了A的interrupt方法而抛出的InterruptedException是wait,sleep,join方法内部不断检查中断状态的值,自己抛出来的,并不是直接由interrupt方法直接引起的。
抛出InterruptedException以后,线程又会回到非中断状态(false)。
而interrupt()方法的作用只是用来改变线程的中断状态(把线程的中断状态改为true,即被中断)。
A线程调用wait,sleep,join方法,这时B线程调用了A的interrupt方法而抛出的InterruptedException是wait,sleep,join方法内部不断检查中断状态的值,自己抛出来的,并不是直接由interrupt方法直接引起的。
抛出InterruptedException以后,线程又会回到非中断状态(false)。
因此interrupt()方法代表着外界希望中断此线程,只是希望,具体怎么处理还是线程内部来做,一般情况下interrupt()方法可以使处于阻塞状态的线程抛出InterruptedException从而结束阻塞状态。
http://my.oschina.net/summerpxy/blog/198457