interrupt中断这个线程。 调用方法的线程将处于“暂停”状态,并且线程不会停止执行。
调用Object类的wait (,wait )、long )或wait )、int )方法或join )、join )、join )、long、int )方法时线程被阻塞在JUC锁或队列相关类抛出InterruptedException异常之前,将调用以下静态方法interrupted以清除中断状态: 因此,catch必须在出现此异常时重新抛出或重新调用中断。 否则,该线程的中断状态将被丢弃。 例如,如果主线程监听子线程的中断状态并进行不同的处理,子线程抛出此异常并未被正确处理,则主线程无法识别子线程的中断状态)
如果此线程被interruptible channel I/o操作阻止,则通道将关闭,线程将设置为中断状态,并且线程将处于Java.nio.channels.closedbyinterruptexcel
如果线程被java.nio.channels.Selector阻止,则会设置线程中断状态,并立即从选择操作返回,就像调用选择器的wakeup方法一样。
如果上述条件都不成立,则设置该线程的中断状态。
中断未运行的线程没有效果
内部静态方法。 测试当前线程是否被中断。 通过这种方法,可以清除线程的中断状态。 这意味着,如果连续两次调用方法,第二次调用将返回false。 但是,除非当前线程在第一次调用中清除中断状态,然后在第二次调用中检查状态之前再次中断,否则返回false。
此方法返回false,因此将反映线程中断并被忽略。 这是因为在暂停期间线程还没有处于活动状态
publicstaticbooleaninterrupted ((returncurrentthread ).isinterrupted ) ) true; } isInterrupted将测试线程是否被中断。 线程的暂停状态不受此方法的影响。
此方法返回false,因此将反映线程中断并被忽略。 这是因为在暂停期间线程还没有处于活动状态
publicbooleanisinterrupted (({ returnisinterrupted ) ) false; } is interrupted (布尔)
私有关联函数(booleanisinterrupted ); 可以看到interrupted和isInterrupted都调用了内部的本地方法isInterrupted方法。 参数是中断状态是否清晰。
interrupted,isInterrupted的区别: interrupted影响当前线程,而isInterrupted影响调用方法的线程对象。 例如,在主线程main中调用子线程sub的isInterrupted方法,同时调用静态interrupted方法。 isInterrupted作用于子线程sub,interrupted作用于主线程main