1.在这个 http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/00cd9dc3c2b5/src/share/native/java/lang/Thread.c
在上面链接里面查看对应的native 本地方法所对应 的hotspot虚拟机的源码
如上面贴出的就是 Thread相关的 本地方法,如sleep的源码,则需要
搜索 方法名 JVM_Sleep 这个名字 在hotspot中的 jvm.cpp文件中。
这里应该先用工具如 everyThing 搜索 jvm.cpp 文件,后再此文件 用sublime 打开后搜索
大写的 JVM_Sleep
可以看到其调用了 Thread的 is_interrupted 函数,
所以从sleep函数内部调用可以知道,如果此时外部有调用线程中断interrupte ,即此时sleep判断中断标注会是true成立后, 会抛出异常 InterruptedException!
所以再调用sleep,wait等线程阻塞的方法时候,都有显示的捕获异常
后,再搜索Thread.cpp 文件中的 is_interrupted 如下:
再搜索 操作平台 的如os_linux.cpp中 的 is_interrupted 如下:
可以看到,他是会对中断标志复位操作!!!