关于java:Thread类Interuupt相关方法源码学习

250次阅读

共计 891 个字符,预计需要花费 3 分钟才能阅读完成。

public void interrupt() {if (this != Thread.currentThread())
            checkAccess();

        synchronized (blockerLock) {
            Interruptible b = blocker;
            if (b != null) {interrupt0();           // Just to set the interrupt flag
                b.interrupt(this);
                return;
            }
        }
        interrupt0();}

intertupt 办法的外围在于 interrupt0() 办法,这个办法只会将 interruptFlag 设置为 true,尽管设置 flag 为 true 了,然而并不会中断以后线程,只有在线程运行能产生 InterrupteException 的办法时,jvm 会主动中断线程并将线程的中断标记位革除,从新设置位 false。

 public static boolean interrupted() {return currentThread().isInterrupted(true);
    }

interrupted 办法次要是获取以后线程 currentThread,并通过以后线程调用 isInterrupted(true),参数 true 示意线程调用该办法之后会将中断标记位清零,从新设置为 false

 public boolean isInterrupted() {return isInterrupted(false);
    }
    private native boolean isInterrupted(boolean ClearInterrupted);

isInterrupted() 办法底层时调用的 java 的本地办法 isInterrupted(boolean ClearInterrupted),参数 ClearInterrupted 默认是 false,阐明间接调用 isInterrupted() 是不会从新将标记地位为 false,而且 isInterrupted() 是将调用该办法的对象所在线程的中断标记位设置为 fasle
以后线程和调用线程不肯定雷同,比方以后线程是 A,在 A 中调用线程 B 对象的 isInterrupted() 办法

正文完
 0