下面讓我們來大概的分析下一個(gè)Java線程啟動(dòng)后瓷胧,底層的調(diào)用細(xì)節(jié)趟庄。
環(huán)境:JDK:1.8
? ? ? ? ? ?glibc:2-25
? ? ? ? ? ?linux-kernel:2.6.0
一JAVA 層面:
當(dāng)我們創(chuàng)建一個(gè)線程并執(zhí)行start()方法后這個(gè)線程才會(huì)被創(chuàng)建和執(zhí)行。java.lang.Thread.start()方法會(huì)調(diào)用本地方法start0();
二 JVM 層面:
接下來start0()方法會(huì)調(diào)用JVM_StartThread()方法:
這是JVM_StartThread的具體實(shí)現(xiàn)伪很,可以看到戚啥,它會(huì)創(chuàng)建一個(gè)JavaThread實(shí)例。
我們來看看JavaThread的構(gòu)造方法里邊發(fā)生了什么:
os::create_thread的具體實(shí)現(xiàn)锉试。在這個(gè)方法中會(huì)創(chuàng)建一個(gè)平臺(tái)相關(guān)的OSThread 實(shí)例猫十。
在os::create_thread()方法中會(huì)利用glibc庫中的pthread.h中的pthread_create方法創(chuàng)建一個(gè)輕量級(jí)的Linux進(jìn)程,這個(gè)方法執(zhí)行后键痛,線程創(chuàng)建控制流從JVM轉(zhuǎn)到OS.
三 OS層:
pthread.h 中定義pthread_create()方法炫彩。
pthread_create()方法的具體實(shí)現(xiàn)。
pthread_create 方法進(jìn)入clone方法的橋梁create_thread()方法絮短。
create_thread方法的具體實(shí)現(xiàn):
系統(tǒng)調(diào)用:
系統(tǒng)調(diào)用的處理程序:sys_clone
do_fork()函數(shù)的具體實(shí)現(xiàn):
參考資料:①https://yq.aliyun.com/articles/67090? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? spm=5176.8091938.0.0.G8W8Xw
? ? ? ? ? ? ? ? ? ②http://blog.csdn.net/u011955950/article/details/45601985
? ? ? ? ? ? ? ? ? ③http://hllvm.group.iteye.com/group/topic/43599