閱讀1007 返回首頁    go 技術社區[雲棲]


JAVA線程創建底層流程

下麵讓我們來大概的分析下一個Java線程啟動後,底層的調用細節。

環境:JDK:1.8

           glibc:2-25

           linux-kernel:2.6.0




1240
1.0-大致的執行流程

一JAVA 層麵:

當我們創建一個線程並執行start()方法後這個線程才會被創建和執行。java.lang.Thread.start()方法會調用本地方法start0();

1240

二 JVM 層麵:

接下來start0()方法會調用JVM_StartThread()方法:


1240

這是JVM_StartThread的具體實現,可以看到,它會創建一個JavaThread實例。

1240

我們來看看JavaThread的構造方法裏邊發生了什麼:


1240

os::create_thread的具體實現。在這個方法中會創建一個平台相關的OSThread 實例。

1240

在os::create_thread()方法中會利用glibc庫中的pthread.h中的pthread_create方法創建一個輕量級的Linux進程,這個方法執行後,線程創建控製流從JVM轉到OS.

1240

三 OS層:

pthread.h 中定義pthread_create()方法。

1240

pthread_create()方法的具體實現。

1240

pthread_create 方法進入clone方法的橋梁create_thread()方法。

1240

create_thread方法的具體實現:


1240

係統調用:

1240

係統調用的處理程序:sys_clone


1240

do_fork()函數的具體實現:


1240

參考資料:①https://yq.aliyun.com/articles/67090?                                                       spm=5176.8091938.0.0.G8W8Xw

                  ②https://blog.csdn.net/u011955950/article/details/45601985

                  ③https://hllvm.group.iteye.com/group/topic/43599

最後更新:2017-04-01 16:39:46

  上一篇:go Xen Server虛擬機刪除數據的恢複過程
  下一篇:go 華大基因:雲計算“撬動”大基因