官术网_书友最值得收藏!

1.4 在Java中如何使用多線程

在Java中實現線程的方式有很多:繼承Thread類、實現Runnable接口、使用ExecutorService線程池、使用Callable/Future實現帶有返回值的多線程,等等。因此,在Java中開發一個多線程應用非常簡單,本節將介紹具體方法

1.4.1 實現Runnable接口創建線程

Runnable是聲明一個線程的接口,使用方法如下。

注意:線程是通過thread.start()來啟動的,線程啟動后,會異步執行RunnableThreadExample中的run()方法。

1.4.2 繼承Thread類創建線程

Thread是一個類,可以直接繼承該類來創建線程,使用方法如下。

Runnable和Thread的區別在于,前者是接口,后者是類。如果當前需要實現線程的類已經集成了另外一個類,就無法再通過集成Thread類來實現線程,只能通過Runnable接口來完成。

Thread類也實現了Runnable接口,即一個線程實例。啟動線程的方法仍然是通過Thread類的start()實例方法來完成的。

1.4.3 實現Callable接口并創建帶返回值的線程

在有些場景中,我們可能需要讓一個異步執行的任務在執行完成后返回一個結果。而前面使用的線程中,run()方法是一個void修飾的無返回值的方法,很顯然無法達到我們的要求。因此在Java中提供了Callable和Future來創建有返回值的線程,實現代碼如下。

從上述代碼中可以看到,Callable接口提供了一個帶有返回值的call()方法,接著定義了一個FutureTask,來表示一個獲取未來執行結果的任務,并使用Thread線程來執行,最后通過futureTask.get()方法來獲得執行結果。

這種方式并不是目前最好的選擇,在后續章節中筆者會詳細說明它的原理及最佳實踐方案。

主站蜘蛛池模板: 赫章县| 屯留县| 大洼县| 桓台县| 博湖县| 新民市| 浏阳市| 加查县| 梁山县| 隆安县| 德昌县| 隆林| 民和| 佳木斯市| 平潭县| 龙门县| 图木舒克市| 固始县| 五河县| 铜陵市| 绥滨县| 巴林左旗| 冀州市| 葵青区| 万州区| 丰县| 城固县| 全南县| 邯郸县| 营山县| 壶关县| 英超| 北流市| 永清县| 汕尾市| 安宁市| 稷山县| 宿迁市| 平江县| 贵阳市| 克拉玛依市|