多執行緒與高併發「執行緒生命週期」

發布時間: 2021-11-26 04:44:10
分類: 科技

介紹:

執行緒是程式執行的一個路徑,每一個執行緒都有自己的區域性變量表、程式計數器以及生命週期。

每一個進行至少要有一個執行緒在執行。

執行緒的生命週期

如上圖:執行緒的生命週期大體可以分為5個重要的階段。

執行緒的new狀態,我們利用關鍵字new建立一個Thread物件時,此時它並不處於執行狀態,因為沒有執行start方法進行啟動。準確地說new狀態,只是Thread物件的狀態,在未呼叫start之前,該執行緒根本不存在。

new狀態透過start方法進入runnable狀態

執行緒的runnable狀態,執行緒物件進入runnable狀態,必須呼叫start方法,此時,才是真正的在JVM程序中建立了一個執行緒。但是,執行緒一經啟動就會立馬執行嗎,答案是否定的。runnable狀態,被稱為可執行狀態,在這個狀態下,具備了可執行的資格,但是真正執行起來,需要等待cup的排程。

由於存在running狀態,所以runnable不會直接進入blocked和terminated狀態。嚴格來講,runnable狀態只能意外終止和進入running狀態。

執行緒的running狀態,一旦cpu透過輪詢或其他方式,從任務可執行佇列裡選中了執行緒,那麼此時才真正地執行且執行自己的邏輯程式碼,需要說明一點,一個正在running狀態的執行緒實時上也是runnble的,但反過來不成立。

在該狀態下,執行緒狀態可以發生如下的狀態轉換:

執行緒的blocked狀態,上述我們已經講了進入blocked的原因,此處不再贅述。執行緒在blocked狀態下可以切換至如下幾種狀態:

執行緒的terminated狀態,是執行緒的最終狀態,在該狀態下將不會再切換到任何狀態。執行緒進入terminated狀態,意味著該執行緒的生命週期結束了。下列情況將會使執行緒進入terminated狀態。