多執行緒基礎(一)執行緒建立

2022-09-07 21:09:17 字數 1875 閱讀 5131

ⅰ. 繼承thread類

自定義乙個類,繼承thread類

重寫run方法,run方法中用於定義當前執行緒的執行邏輯。

建立執行緒類的物件

開啟執行緒 thread類中start()方法啟動執行緒

/**

* 此案例展示第一種建立執行緒之方法:繼承thread類

* 說明:

* 1.若 static 修飾 i,則共享i

* * 關於thread中的幾個方法:

* 1.雖然main()也是乙個執行緒,但若需要thread中的函式,如yiled()或sleep()

* 也需要繼承thread,其本身不具有。

* 需要先返回當前執行緒物件。

* 3.getname()是thread類中的方法,若只是實現了runnable介面,也需要先返回

* 當前執行緒物件才能使用

* 4.sleep() yiled()是thread中的靜態方法

*/public class firstthread extends thread

}public static void main(string args) throws interruptedexception }}

}

ⅱ. 實現runnable介面

自定義乙個類 實現runnable介面。

實現run方法。

建立乙個自定義執行緒類的物件,但是該物件身上沒有start啟動執行緒的方法;可以建立thread物件,將自定義執行緒類的物件作為引數傳入構造方法中。

呼叫start方法啟動執行緒

/**

* 此案例展示建立執行緒的第二種方法:實現runnable介面

* 其實現類僅作為thread類的target。(把run()包裝成乙個thread類)

* * 說明:此方法中雖然new了兩個類物件,但都作為了乙個thread類的target

* 所以共享了變數i

* */

public class secendthread implements runnable

}public static void main(string args) }}

}

ⅲ. 實現runnable介面

自定義乙個類 實現callable介面

實現call方法 call方法中包含的是執行緒執行邏輯**

executors獲取執行緒服務物件

呼叫執行緒服務物件submit,將自定義執行緒物件傳給submit方法的引數;submit返回值為future型別,call方法的返回值就包含在future物件中;可以通過future的get方法獲取返回值物件

public class threaddemo2 

}//自定義執行緒--方式三

class mythread2 implements callable

}

只有方法一需要繼承thread類,不如後兩者。

只有方法三可以有返回值,可以丟擲異常。

callable通過泛型來定義返回結果型別。在實際開發過程中和runnable相似,如果需要執行結果那麼使用callable。

runnable

callable

返回值沒有

通過泛型來定義返回值型別

啟動方式

1.通過thread直接啟動

2.通過執行緒池的execute或者submit方法啟動

1.通過futuretask轉化成runnable之後再通過thread啟動

2.通過執行緒池的submit方法啟動

⭐異常處理

1.不允許拋異常,那麼就無法通過全域性方法來處理。

允許拋異常,能通過全域性方式來統一處理。

多執行緒程式設計(一) 執行緒建立和退出

一 引言 二 例項 以下例項中建立了2個執行緒,其中第乙個執行緒是在程式執行到中途時呼叫pthread exit函式退出,第二個正常退出。在主線程中,收集這兩個執行緒的退出資訊,並釋放資源。從例項可以看出,這兩個執行緒是併發執行的。thread.c include include void thre...

多執行緒程式設計(一) 執行緒建立和退出

一 引言 二 例項 以下例項中建立了2個執行緒,其中第乙個執行緒是在程式執行到中途時呼叫pthread exit函式退出,第二個正常退出。在主線程中,收集這兩個執行緒的退出資訊,並釋放資源。從例項可以看出,這兩個執行緒是併發執行的。cpp view plain copy thread.c inclu...

C 多執行緒(一) 執行緒管理

多執行緒是 此處省略一萬字,省略的文字詳細說明了什麼是多執行緒 其歷史及其發展 使用多執行緒的好處和缺點以及c c 對多執行緒的支援的歷史 c 標準庫自c 11標準以來開始支援多執行緒,多執行緒相關的類在thread標頭檔案中,所以使用請先必須 include 啟動乙個執行緒非常簡單,例程如下 in...