執行緒的建立 建立執行緒常見的三種方式

2021-10-23 06:45:44 字數 3562 閱讀 9141

一、繼承thread類建立執行緒類

(1)定義thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。thread類實際上就是實現了runnable介面。

(2)建立thread子類的例項,即建立了執行緒物件。

(3)呼叫執行緒物件的start()方法來啟動該執行緒。

優缺點:

缺點:1、繼承父類,類只能單繼承

2、不可以實現資源的共享

**:

public

class

rabbit1

extends

thread

catch

(interruptedexception e)

system.out.

println

(getname()

+i+":"

+"開始執行!");

}}public

static

void

main

(string[

] args)

catch

(interruptedexception e)

//輸出主線程資訊

system.out.

println

(thread.

currentthread()

.getname()

+":"

+ i);}

}}

執行效果:

main:

0thread-

00:開始執行!

main:

1thread-

01:開始執行!

main:

2thread-

02:開始執行!

main:

3thread-

03:開始執行!

main:

4thread-

04:開始執行!

main:

5thread-

05:開始執行!

main:

6thread-

06:開始執行!

main:

7thread-

07:開始執行!

main:

8thread-

08:開始執行!

thread-

09:開始執行!

main:

9

二、通過runnable介面建立執行緒類

(1)定義runnable介面的實現類,並重寫該介面的run()方法,該run()方法的方法體同樣是該執行緒的執行緒執行體。

(2)建立 runnable實現類的例項,並依此例項作為thread的target來建立thread物件,該thread物件才是真正的執行緒物件。

(3)呼叫執行緒物件的start()方法來啟動該執行緒。

優缺點:

優點:1、類只能單繼承,而介面可以多實現

2、可以實現資源的共享

**示例,模擬搶票:

public

class

tickettest

}//實現runnable方法

class

ticket

implements

runnable

trycatch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"正在賣第 "

+tickets+

" 張票!");

tickets--;}

}}}

執行效果:

視窗一:正在賣第  20  張票!

視窗一:正在賣第 19 張票!

視窗一:正在賣第 18 張票!

視窗一:正在賣第 17 張票!

視窗一:正在賣第 16 張票!

視窗一:正在賣第 15 張票!

視窗一:正在賣第 14 張票!

視窗一:正在賣第 13 張票!

視窗一:正在賣第 12 張票!

視窗三:正在賣第 11 張票!

視窗二:正在賣第 10 張票!

視窗三:正在賣第 9 張票!

視窗一:正在賣第 8 張票!

視窗一:正在賣第 7 張票!

視窗三:正在賣第 6 張票!

視窗二:正在賣第 5 張票!

視窗二:正在賣第 4 張票!

視窗二:正在賣第 3 張票!

視窗二:正在賣第 2 張票!

視窗二:正在賣第 1 張票!

三、通過callable和future建立執行緒

(1)建立callable介面的實現類,並實現call()方法,該call()方法將作為執行緒執行體,並且有返回值。

(2)建立callable實現類的例項,使用futuretask類來包裝callable物件,該futuretask物件封裝了該callable物件的call()方法的返回值。

(3)使用futuretask物件作為thread物件的target建立並啟動新執行緒。

(4)呼叫futuretask物件的get()方法來獲得子執行緒執行結束後的返回值

**:

//有返回值的執行緒,實現callable介面

public

class

randomcallable

implements

callable

/*產生隨機數的多執行緒

1.可以有返回值 可以根據泛型 自定義

2.call()此方法 丟擲了乙個最大的異常

*/@override

public integer call()

throws exception

}

執行效果

false

//此處執行後停頓兩秒

true

7

四、建立執行緒的三種方式的對比

採用實現runnable、callable介面的方式創見多執行緒時,優勢是:

執行緒類只是實現了runnable介面或callable介面,還可以繼承其他類。

在這種方式下,多個執行緒可以共享同乙個target物件,所以非常適合多個相同執行緒來處理同乙份資源的情況,從而可以將cpu、**和資料分開,形成清晰的模型,較好地體現了物件導向的思想。

劣勢是:

程式設計稍微複雜,如果要訪問當前執行緒,則必須使用thread.currentthread()方法。

使用繼承thread類的方式建立多執行緒時優勢是:

編寫簡單,如果需要訪問當前執行緒,則無需使用thread.currentthread()方法,直接使用this即可獲得當前執行緒。

劣勢是:

執行緒類已經繼承了thread類,所以不能再繼承其他父類。

執行緒的三種建立方

一,繼承thread 重寫run class programmer extends thread public static void main string args 二,繼承runnable 實現run class programmer implements runnable public st...

執行緒 三種方式 建立執行緒

第一種 1 模擬龜兔賽跑 繼承thread 重寫run 執行緒體 2 使用執行緒 建立子類物件 物件.strat 執行緒啟動 author administrator public class rabbits extends thread class tortoise extends thread ...

執行緒的三種建立方式

public class web12306 多執行緒的三種方式 class threadtest01 extends thread class threadtest02 implements runnable class threadtest03 implements callable return...