Java 實現線程的方式有幾種方式?帶有返回值的線程怎麼實現?
在Java線程開發中,有幾種方法開啟線程?假如需要得到線程返回的信息怎麼辦?可以實現嗎?凱哥將通過源碼和大家一起分享下線程怎麼將返回值帶回來的。
一:無返回值類型的
1:繼承Thread類
2:實現Runnable接口
這兩種是大家常用的,代碼demo就截圖吧。
1:繼承Thread類的寫法
定義:一個類型需要extends thread類,然後實現thread類的run方法。

2:實現Runnable接口的寫法:
定義一個類,實現Runable接口,重新run方法。
New個thread對象,使用有參構造器,參數是runnable的。然後thread.start()

二:帶有返回值的
3:實現Callable接口
操作步驟:
一個類實現Callable接口,重新call方法;
在調用的時候,需要使用FutureTask這個類的有參構造,然後再使用thread的有參構造。
最後調用task的get方法。
代碼如下:
運行結果:
Callable返回值的源碼:
我們從FutureTask這個類入手,因為返回值就是從FutureTask中獲取的。來看看類關係圖:
FutureTask實現了RunnableFuture接口,RunnableFuture接口繼承了Future和Runnable接口。
我們看RunnableFuture這個接口的時候,發現只有一個無返回值的run方法。那麼,線程返回的數據是哪個類實現的呢?其實就在FutureTask類裡面。我們在來看看FuntrueTask這個類:
重新了run方法。最後,有個set result。既然有set方法。再來看看demo中task.get()方法:
Get方法就帶有返回值的。
至此,實現callable接口帶有返回值的原因已經找到了。
4:使用線程池創建線程
使用線程池創建的線程,可以有返回值,也可以沒有返回值。使用Executory這個頂級接口來處理。
我們先來看看Executor接口的關係。如下圖:
其中看到了熟悉的ThreadPoolExecutor和ScheduledThreadPoolExecutor
4.1:使用Executor創建沒有返回值的線程:
說明:這裡不帶返回值的,其實就是調用了Runnable的run方法。
4.2:帶有返回值的demo
創建一個類,實現Callable接口。如下圖:
通過這個接口,我們知道是有返回值的。
三:總結
Java中實現線程有4種方式:
我們最熟悉的不帶換回值的兩種以及帶有返回值的兩種。分別是:
Thread、Runnable和Callable以及線程池
閱讀更多 愛吃飯炒蛋 的文章