jdk的native源碼hotspot 學習姿勢

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 如下:
在這裏插入圖片描述
可以看到,他是會對中斷標誌復位操作!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章