併發 啟動執行緒的正確方式

2021-10-18 01:25:24 字數 793 閱讀 2342

方法含義

啟動新執行緒:方法進行的時候,首先是主線程啟動了start()方法,通知jvm,來啟動新執行緒,執行緒何時執行由執行緒排程器決定,該方法執行並不代表內部邏輯已經執行了,執行與否完全由執行緒排程器決定。由此,呼叫start方法順序並不代表執行緒的執行順序。

呼叫start方法執行,其實會讓兩個執行緒執行,第乙個主線程或者其他執行緒來執行start方法,第二個方法是剛剛建立的子執行緒

準備工作

子執行緒首先處於就緒態(獲取到除了cpu以外的其他資源,比如:已經設定了上下文、棧、執行緒狀態、以及pc(程式暫存器:指明了程式執行的位置)

不能重複執行start方法

start原始碼解析

·啟動新執行緒檢查執行緒狀態

·加入執行緒組

·呼叫start0()

原始碼解析

兩種情況:重寫了thread的run方法;傳入target物件,呼叫run方法;方法正常呼叫,不會建立子執行緒

1.乙個執行緒兩次呼叫start方法會出現什麼情況?為什麼?

會丟擲異常;start方法開始的時候,對執行緒有個狀態是否為初始狀態的檢測,如果之前已經執行過start方法,threadstatus不為初始態0的話,就會丟擲這個不合法的執行緒狀態異常。

2.既然start方法會呼叫run方法,為什麼我們選擇呼叫start方法,而不是直接呼叫run方法呢?

呼叫start方法是啟動乙個執行緒,真正意義上經歷乙個執行緒的生命週期,如果直接run方法,只是乙個普通的方法。

執行緒的正確結束方式

在使用c語言進行多執行緒程式設計時,最重要的是執行緒怎麼結束,而不是它怎麼開始。多執行緒程式設計的主要問題,是需要執行緒 正確 結束,我們在程式設計中應該盡量避免使用系統提供的使執行緒強制結束的函式,而應該使用一定的同步方式,保證執行緒分配的資源得到正確地處理,避免記憶體洩漏。很多人在進行多執行緒程...

多執行緒啟動方式

繼承thread類,並重寫run方法,例項化該類物件,呼叫start方法 示例 public class thread1 extends thread public static void main string args 執行結果 結果不唯一 1 main1 1run1 2run1 3run1 4...

多執行緒核心3 執行緒的正確停止方式

threadone.isinterrupted thread 0執行緒被請求中斷,返回true threadone.interrupted 與thread.interrupted 由於interrupted 方法為靜態方法,呼叫它的物件為rightwayinterrupted類,因為main執行緒未...