1. 程式人生 > >java創建實現多線程的方式

java創建實現多線程的方式

nbsp call 線程 style png 構造器 技術分享 獲得 java類

一、Java使用多線程主要有三種方式:

第一種:繼承Thread類

步驟:① 定義一個類,繼承Thread類,並重寫Thead類的run方法,run方法內的內容為該線程要執行的任務。run方法也被稱為執行體。

② 創建Thead子類的實例,即創建線程對象。

③ 使用線程的start方法啟動線程。

第二種:實現Runnable方法

步驟:① 定義一個類,實現Runnable接口,並重寫該接口的run方法,run方法體仍然是執行體。

② 創建一個Thead類的實例,並將實現Runnable接口的類的實例作為參數傳入Thead類的構造器中。

③ 調用Thread類實例的start方法啟動線程。

第三種:實現Callable接口(需使用Future接口的實現類配合)

步驟:① 定義一個類A,實現Callable接口,並重寫該接口的call方法,call方法體仍然是執行體,call方法有返回值

② 創建實現Callable接口的類A的實例B,並使用Future接口的實現類FutureTask子類包裝B,FutureTask對象封裝了B的call方法的返回值。

③ 創建一個Thead類的實例,並將FutureTask的類的實例作為參數傳入Thead類的構造器中。

④ 調用Thread類實例的start方法啟動線程。

⑤ 需要時,調用FutureTask類的實例的get方法獲取call方法的返回值。

二、創建線程的三種方式的對比

采用實現Runnable、Callable接口的方式創建多線程時,優勢是:

線程類只是實現了Runnable接口或Callable接口,還可以繼承其他類(java類可實現多個接口,但只能繼承一個父類)。

在這種方式下,多個線程可以共享同一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數據分開,形成清晰的模型,較好地體現了面向對象的思想。

劣勢是:

編程稍微復雜,如果要訪問當前線程,則必須使用Thread.currentThread()方法。

使用繼承Thread類的方式創建多線程時優勢是:

編寫簡單,如果需要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當前線程。

劣勢是:

線程類已經繼承了Thread類,所以不能再繼承其他父類。

三、使用線程池執行線程

jdk1.5之後新增的java.util.concurrent包中提供了很多種線程池的實現:

技術分享

可以使用 Executors 就行創建,只需創建線程對象,放入調用ExecutorService的execute方法並將創建的線程對象傳入即可,無需用戶再手動啟動線程,

同時可以提高線程的利用率。


java創建實現多線程的方式