建立執行緒的三種方法詳細對比

2022-05-04 22:06:25 字數 1968 閱讀 4787

1、繼承thread類:

步驟:①、定義類繼承thread;

②、複寫thread類中的run方法;

目的:將自定義**儲存在run方法,讓執行緒執行

③、呼叫執行緒的start方法:

該方法有兩步:啟動執行緒,呼叫run方法。

1 public class threaddemo1 

15 }

16 }

17 //繼承thread類

18 class threaddemo extends thread

24 //重寫run方法。

25 public void run()

29 }

30 }

2、實現runnable介面:介面應該由那些打算通過某一線程執行其實例的類來實現。類必須定義乙個稱為run 的無參方法。

實現步驟:  ①、定義類實現runnable介面

②、覆蓋runnable介面中的run方法

將執行緒要執行的**放在該run方法中。

③、通過thread類建立執行緒物件。

④、將runnable介面的子類物件作為實際引數傳遞給thread類的建構函式。

自定義的run方法所屬的物件是runnable介面的子類物件。所以要讓執行緒執行指定物件的run方法就要先明確run方法所屬物件

⑤、呼叫thread類的start方法開啟執行緒並呼叫runnable介面子類的run方法。

public class runnabledemo 

}//定義類實現runnable介面

class runtest implements runnable}}

}

3、通過callable和future建立執行緒:

實現步驟:①、建立callable介面的實現類,並實現call()方法,改方法將作為執行緒執行體,且具有返回值。

②、建立callable實現類的例項,使用futruetask類進行包裝callable物件,futuretask物件封裝了callable物件的call()方法的返回值

③、使用futuretask物件作為thread物件啟動新執行緒。

④、呼叫futuretask物件的get()方法獲取子執行緒執行結束後的返回值。

1 public class callablefutruetest 

13 }

14 //獲取並輸出子執行緒call()方法的返回值

15 try catch (interruptedexception e) catch (executionexception e)

22 }

23 }

24 class callabletest implements callable

31 return i;

32 }

33 }

三種方法對比:

繼承thread:執行緒**存放在thread子類run方法中。

優勢:編寫簡單,可直接用this.getname()獲取當前執行緒,不必使用thread.currentthread()方法。

劣勢:已經繼承了thread類,無法再繼承其他類。

實現runnable:執行緒**存放在介面的子類的run方法中。

優勢:避免了單繼承的侷限性、多個執行緒可以共享乙個target物件,非常適合多執行緒處理同乙份資源的情形。

劣勢:比較複雜、訪問執行緒必須使用thread.currentthread()方法、無返回值。

實現callable:

優勢:有返回值、避免了單繼承的侷限性、多個執行緒可以共享乙個target物件,非常適合多執行緒處理同乙份資源的情形。

劣勢:比較複雜、訪問執行緒必須使用thread.currentthread()方法

建議使用實現介面的方式建立多執行緒。

iOS 建立多執行緒的三種方法

1 通過nsobject的方法建立執行緒 這個方法會自動開闢乙個後台執行緒,引數1 在這個後台執行緒中執行的方法,引數2 用於傳遞引數 self performselectorinbackground selector banzhuanplus withobject nil 第一步 建立執行緒 ns...

Java建立執行緒Thread的三種方法

1.通過繼承thread類建立執行緒 1 繼承thread類,重寫run 方法 2 建立繼承了thread類的類的物件,呼叫物件的start方法開啟執行緒 2.通過實現runnable介面建立執行緒 1 實現runnable介面,重寫run 方法 2 建立實現了runnable介面的類的物件,將物件...

建立物件的三種方法

三種方式 利用字面量建立物件 物件字面量 就是花括號 裡面包含了表達這個具體事物 物件 的屬性和方法。var a 1.裡面的屬性或者方法我們採取鍵值對的形式鍵屬性名 值屬性值 2.多個屬性或者方法中間用逗號隔開的 3.方法冒號後面跟的是乙個匿名函式 使用物件 1.呼叫物件的屬性我們採取物件名.屬性名...