1007
技術社區[雲棲]
JAVA線程創建底層流程
下麵讓我們來大概的分析下一個Java線程啟動後,底層的調用細節。
環境:JDK:1.8
glibc:2-25
linux-kernel:2.6.0

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

二 JVM 層麵:
接下來start0()方法會調用JVM_StartThread()方法:

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

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

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

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

三 OS層:
pthread.h 中定義pthread_create()方法。

pthread_create()方法的具體實現。

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

create_thread方法的具體實現:

係統調用:

係統調用的處理程序:sys_clone

do_fork()函數的具體實現:

參考資料:①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