溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中線程Thread的特點(diǎn)及使用方法是什么

發(fā)布時(shí)間:2023-05-06 10:24:15 來源:億速云 閱讀:97 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“Java中線程Thread的特點(diǎn)及使用方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中線程Thread的特點(diǎn)及使用方法是什么”吧!

線程:線程是進(jìn)程的組成部分,一個(gè)進(jìn)程可以擁有多個(gè)線程,而一個(gè)線程必須擁有一個(gè)父進(jìn)程。線程可以擁有自己的堆棧,自己的程序計(jì)數(shù)器和自己的局部變量,但不能擁有系統(tǒng)資源。它與父進(jìn)程的其他線程共享該進(jìn)程的所有資源。

線程的特點(diǎn):

線程可以完成一定任務(wù),可以和其它線程共享父進(jìn)程的共享變量和部分環(huán)境,相互協(xié)作來完成任務(wù)。

線程是獨(dú)立運(yùn)行的,其不知道進(jìn)程中是否還有其他線程存在。

線程的執(zhí)行是搶占式的,也就是說,當(dāng)前執(zhí)行的線程隨時(shí)可能被掛起,以便運(yùn)行另一個(gè)線程。

一個(gè)線程可以創(chuàng)建或撤銷另一個(gè)線程,一個(gè)進(jìn)程中的多個(gè)線程可以并發(fā)執(zhí)行。

二:線程的創(chuàng)建及使用

java使用Thread類代表線程,所有的線程對(duì)象都必須是Thread或者其子類的實(shí)例,每個(gè)線程的作用是完成一定任務(wù),實(shí)際上是就是執(zhí)行一段程序流(一段順序執(zhí)行的代碼)

方案一:繼承Thread類創(chuàng)建線程類

步驟:

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

2.創(chuàng)建Thread類的實(shí)例,即創(chuàng)建了線程對(duì)象

3.調(diào)用線程的start方法來啟動(dòng)線程

Java中線程Thread的特點(diǎn)及使用方法是什么

Java中線程Thread的特點(diǎn)及使用方法是什么

結(jié)論:使用繼承子Thread類的子類來創(chuàng)建線程類時(shí),多個(gè)線程無法共享線程類的實(shí)例變量(比如上面的i)

方案二:實(shí)現(xiàn)Runnable接口

1:定義Runnable接口的實(shí)現(xiàn)類,并重寫它的Run方法,run方法同樣是該線程的執(zhí)行體!

2:創(chuàng)建Runnable實(shí)現(xiàn)類的實(shí)例,并將此實(shí)例作為Thread的target創(chuàng)建一個(gè)Thread對(duì)象,該Thread對(duì)象才是真正的線程對(duì)象!

3:調(diào)用start方法啟動(dòng)該線程

Java中線程Thread的特點(diǎn)及使用方法是什么

Java中線程Thread的特點(diǎn)及使用方法是什么

結(jié)論:采用Ruunable接口的方式創(chuàng)建多個(gè)線程可以共享線程類的實(shí)例變量,這是因?yàn)樵谶@種方式下,程序創(chuàng)建的Runnable對(duì)象只是線程的target,而多個(gè)線程可以共享一個(gè)target,所以多個(gè)線程可以共享一個(gè)實(shí)例變量

通過Runnable實(shí)現(xiàn)多線程其實(shí)就是將run包裝成線程的執(zhí)行體,但是目前java無法將任意方法包裝成線程執(zhí)行體

方案三:使用callable和future創(chuàng)建線程

從Java5開始,Java提供 Callable接口,Callable接口提供了一個(gè)call()方法可以作為線程執(zhí)行體,看起來和Runnable很像,但call()方法更強(qiáng)大——call()方法可以有返回值、call()方法可以拋出異常

 

Java5提供了Future接口來代表Callable接口的call()方法的返回值,并為Future接口提供了一個(gè)FutureTask實(shí)現(xiàn)類,該實(shí)現(xiàn)類實(shí)現(xiàn)類Future接口,也實(shí)現(xiàn)了Runnable接口——可以作為Thread的target。

實(shí)現(xiàn)步驟:

1:創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call方法,該call方法會(huì)成為線程執(zhí)行體,且call方法具有返回值,在創(chuàng)建callable接口的實(shí)現(xiàn)類!

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

3:使用FutrueTask對(duì)象作為Thread的target創(chuàng)建并啟動(dòng)新線程!

4:使用FutrueTask的get方法獲取執(zhí)行結(jié)束后的返回值

Java中線程Thread的特點(diǎn)及使用方法是什么

Java中線程Thread的特點(diǎn)及使用方法是什么

結(jié)論:采取Runnable、Callable的優(yōu)勢(shì)在于——線程類只是實(shí)現(xiàn)了Runnable或Callable接口,還可以繼承其它類;在這種方法下,多個(gè)線程可以共享一個(gè)target對(duì)象,因此非常適合多個(gè)相同線程處理同一份資源的情況,從而將CPU、代碼和數(shù)據(jù)分開,形參清晰的模型,體現(xiàn)了面對(duì)對(duì)象的編程思想。劣勢(shì)在于編程復(fù)雜度略高。

感謝各位的閱讀,以上就是“Java中線程Thread的特點(diǎn)及使用方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java中線程Thread的特點(diǎn)及使用方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI