Java Thread.interrupt方法

部分内容引用CSDNdr8737010

比如你在main线程中,开启了一个新的线程new Thread

首先,每个线程内部都有一个boolean型变量表示线程的中断状态,true代表线程处于中断状态,false表示未处于中断状态。

而interrupt()方法的作用只是用来改变线程的中断状态(把线程的中断状态改为true,即被中断)。

A线程调用wait,sleep,join方法,这时B线程调用了A的interrupt方法而抛出的InterruptedException是wait,sleep,join方法内部不断检查中断状态的值,自己抛出来的,并不是直接由interrupt方法直接引起的。
抛出InterruptedException以后,线程又会回到非中断状态(false)。

因此interrupt()方法代表着外界希望中断此线程,只是希望,具体怎么处理还是线程内部来做,一般情况下interrupt()方法可以使处于阻塞状态的线程抛出InterruptedException从而结束阻塞状态。

 

结论:

如果你的线程里,没有堵塞在wait sleep join上,那你得自己循环判断isInterrupt 自己处理

如果你用了wait sleep join 阻塞了,那么会自动不断检查标志位,然后抛出异常。

 

posted @ 2014-05-29 01:51  ruiruige1991  阅读(247)  评论(0编辑  收藏  举报