JAVA執行緒建立底層流程

小路子發表於2017-03-28

下面讓我們來大概的分析下一個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

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

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


相關文章