Java多线程 interrupt()方法源码分析&&分析Java的native代码

interrupt()源码分析

根据源码 , 可以看到 interrupt()源码的核心为interrupt0()方法
Java多线程 interrupt()方法源码分析&&分析Java的native代码
可以看到其interrupt()方法为native方法
Java多线程 interrupt()方法源码分析&&分析Java的native代码

分析native代码的方法

如下的链接为openjdk的源码地址
https://github.com/openjdk-mirror/jdk7u-jdk

点击此处的go to file可以查找对应的类

Java多线程 interrupt()方法源码分析&&分析Java的native代码
此次分析的是Thread类的代码, 因此是查找Thread.c
Java多线程 interrupt()方法源码分析&&分析Java的native代码
根据如下的Thread.c的源码, 可以看到interrupt0对应的是JVM_Interrupt
{"interrupt0", "()V", (void *)&JVM_Interrupt},
Java多线程 interrupt()方法源码分析&&分析Java的native代码
接着在如下的hotspot的源代码仓库中, 搜索JVM_Interrupt
https://github.com/openjdk-mirror/jdk7u-hotspot

Java多线程 interrupt()方法源码分析&&分析Java的native代码
根据搜索出来的结果, 打开jvm.cpp
Java多线程 interrupt()方法源码分析&&分析Java的native代码
可以看到调用的是Thread::interrupt(thr);这个方法
Java多线程 interrupt()方法源码分析&&分析Java的native代码
根据thread.cpp的代码, 可以看到其调用的是os::interrupt 去中断线程
Java多线程 interrupt()方法源码分析&&分析Java的native代码
os::interrupt 的代码截取如下. 图片右侧为对于加粗的关键代码的解读
Java多线程 interrupt()方法源码分析&&分析Java的native代码