溫馨提示×

溫馨提示×

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

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

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

發(fā)布時間:2020-05-22 11:20:08 來源:億速云 閱讀:755 作者:Leah 欄目:編程語言

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?這些問題可能是我們?nèi)粘9ぷ鲿姷降摹Mㄟ^這些問題,希望你能收獲更多。下面是揭開這些問題的詳細(xì)內(nèi)容。

一:無返回值類型的

1:繼承Thread類

2:實現(xiàn)Runnable接口

這兩種是大家常用的,代碼demo就截圖吧。

1:繼承Thread類的寫法

定義:一個類型需要extends thread類,然后實現(xiàn)thread類的run方法。

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

2:實現(xiàn)Runnable接口的寫法:

定義一個類,實現(xiàn)Runable接口,重新run方法。

New個thread對象,使用有參構(gòu)造器,參數(shù)是runnable的。然后thread.start()

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

二:帶有返回值的

3:實現(xiàn)Callable<V>接口

操作步驟:

一個類實現(xiàn)Callable接口,重新call方法;

在調(diào)用的時候,需要使用FutureTask這個類的有參構(gòu)造,然后再使用thread的有參構(gòu)造。

最后調(diào)用task的get方法。

代碼如下:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

運(yùn)行結(jié)果:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

Callable返回值的源碼:

我們從FutureTask這個類入手,因為返回值就是從FutureTask中獲取的。來看看類關(guān)系圖:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

FutureTask實現(xiàn)了RunnableFuture接口,RunnableFuture接口繼承了Future和Runnable接口。

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

我們看RunnableFuture這個接口的時候,發(fā)現(xiàn)只有一個無返回值的run方法。那么,線程返回的數(shù)據(jù)是哪個類實現(xiàn)的呢?其實就在FutureTask類里面。我們在來看看FuntrueTask這個類:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

重新了run方法。最后,有個set result。既然有set方法。在來看看demo中task.get()方法:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

Get方法就帶有返回值的。

至此,實現(xiàn)callable接口帶有返回值的原因已經(jīng)找到了。

4:使用線程池創(chuàng)建線程

使用線程池創(chuàng)建的線程,可以有返回值,也可以沒有返回值。使用Executory這個頂級接口來處理。

我們先來看看Executor接口的關(guān)系。如下圖:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

其中看到了熟悉的ThreadPoolExecutor和ScheduledThreadPoolExecutor

4.1:使用Executor創(chuàng)建沒有返回值得線程:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

說明:這里不帶返回值的,其實就是調(diào)用了Runnable的run方法。

4.2:帶有返回值的demo

創(chuàng)建一個類,實現(xiàn)Callable接口。如下圖:

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

編輯

通過這個接口,我們知道是有返回值的。

Java有幾種方法開啟線程?怎么實現(xiàn)帶有返回值的線程?

Java中實現(xiàn)線程有4種方式:

我們最熟悉的不帶換回值的兩種以及帶有返回值的兩種。分別是:

Thread、Runnable和Callable以及線程池

關(guān)于開啟java線程和實現(xiàn)帶有返回值線程的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。

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

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

AI