部分内容引用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 阻塞了,那么会自动不断检查标志位,然后抛出异常。
Java Thread.interrupt方法,布布扣,bubuko.com
时间: 2024-10-27 07:26:02