首頁  >  文章  >  Java  >  Java中執行緒Thread的特性及使用方法是什麼

Java中執行緒Thread的特性及使用方法是什麼

王林
王林轉載
2023-05-20 12:07:291419瀏覽

一個行程可以包含若干個執行緒,執行緒是行程的組成部分,每個執行緒都必須依託所屬的進程。執行緒具有私有的堆疊、程式計數器和局部變量,但無法擁有系統資源。它與父進程的其他執行緒共享該進程的所有資源。

執行緒的特點:

執行緒可以完成一定任務,可以和其它執行緒共享父行程的共享變數和部分環境,相互協作來完成任務。

執行緒是獨立運行的,其不知道進程中是否還有其他執行緒存在。

執行緒的執行是搶佔式的,也就是說,目前執行的執行緒隨時可能被掛起,以便執行另一個執行緒。

一個執行緒可以建立或撤銷另一個線程,一個行程中的多個執行緒可以並發執行。

二:線程的創建及使用

java使用Thread類別代表線程,所有的線程物件都必須是Thread或者其子類別的實例,每個線程的作用是完成某個任務,實際上是就是執行一段程式流程(一段順序執行的程式碼)

方案一:繼承Thread類別建立執行緒類別

步驟:

1.定義Thread類別的子類別並重寫該類別的Run方法,該run方法的方法體就代表了該線程需要完成的任務

2.創建Thread類別的實例,即創建了執行緒物件

3.呼叫執行緒的start方法來啟動執行緒

Java中執行緒Thread的特性及使用方法是什麼

Java中執行緒Thread的特性及使用方法是什麼

# 結論:若使用繼承Thread類別的子類別來建立執行緒類,則多個執行緒無法共用該執行緒類別的實例變量,例如上面提及的變數i

方案二:實作Runnable介面

#1:定義Runnable介面的實作類,並重寫它的Run方法,run方法也是該執行緒的執行體!

2:創建Runnable實現類別的實例,並將此實例作為Thread的target創建一個Thread對象,該Thread對象才是真正的線程對象!

3:呼叫start方法啟動該執行緒

Java中執行緒Thread的特性及使用方法是什麼

Java中執行緒Thread的特性及使用方法是什麼

#結論:採用Ruunable介面的方式建立多個執行緒可以共享線程類別的實例變量,這是因為在這種方式下,程式創建的Runnable物件只是線程的target,而多個線程可以共享一個target,所以多個線程可以共享一個實例變數

透過Runnable實作多執行緒其實就是將run包裝成執行緒的執行體,但目前java無法將任意方法包裝成執行緒執行體

方案三:使用callable和future建立執行緒

從Java5開始,Java提供Callable介面,Callable介面提供了一個call()方法可以作為執行緒執行體,看起來和Runnable很像,但call()方法更強大—— call()方法可以有回傳值、call()方法可以拋出例外

 

Java5提供了Future介面來代表Callable介面的call( )方法的傳回值,並為Future介面提供了一個FutureTask實作類,該實作類別實作類Future接口,也實作了Runnable介面——可以作為Thread的target。

實作步驟:

1:建立Callable介面的實作類,並實作call方法,該call方法會成為執行緒執行體,且call方法具有傳回值,在建立callable介面的實作類別!

2:使用FutrueTask類別來包裝Callable對象,該FutrueTask封裝類別Callable的call方法的返回值

3:使用FutrueTask物件作為Thread的target創建並啟動新線程!

4:使用FutrueTask的get方法取得執行結束後的回傳值

Java中執行緒Thread的特性及使用方法是什麼

Java中執行緒Thread的特性及使用方法是什麼

#結論:採取Runnable、Callable的優點在於——線程類別只是實現了Runnable或Callable接口,還可以繼承其它類;在這種方法下,多個線程可以共享一個target對象,因此非常適合多個相同線程處理同一份資源的情況,從而將CPU、程式碼和資料分開,形參清晰的模型,體現了面對物件的程式設計思想。劣勢在於程式設計複雜度略高。

以上是Java中執行緒Thread的特性及使用方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除