当前位置: 首页 > 后端技术 > Java

Thread类Interuupt相关方法源码学习

时间:2023-04-01 20:33:44 Java

publicvoidinterrupt(){if(this!=Thread.currentThread())checkAccess();synchronized(blockerLock){Interruptibleb=blocker;如果(b!=null){中断0();//只是为了设置中断标志b.interrupt(this);返回;}}中断0();}interrupt方法的核心在于interrupt0()方法。此方法仅将interruptFlag设置为true。flag虽然设置为true,但不会中断当前Thread,只有当线程运行了一个可以产生InterrupteException的方法时,jvm才会自动中断线程并清除线程的中断标志位,并将该位重置为false.publicstaticbooleaninterrupted(){returncurrentThread().isInterrupted(true);}interrupted方法主要是获取当前线程currentThread,通过当前线程调用isInterrupted(true)。参数true表示线程在调用该方法Clear后会设置中断标志位并重置为falsepublicbooleanisInterrupted(){returnisInterrupted(false);}privatenativebooleanisInterrupted(booleanClearInterrupted);isInterrupted()方法底层调用的java原生方法isInterrupted(booleanClearInterrupted),参数ClearInterrupted默认为false,表示直接调用isInterrupted()不会将标志位重置为false,isInterrupted()是将调用该方法的对象所在线程的中断标志位设置为fasle。当前线程和调用线程不一定相同,比如当前线程是A,调用A中线程B对象的isInterrupted()方法