天天看點

java建立線程的三種方式及其對比

java中建立線程主要有三種方式:

一、繼承thread類建立線程類

(1)定義thread類的子類,并重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務。是以把run()方法稱為執行體。

(2)建立thread子類的執行個體,即建立了線程對象。

(3)調用線程對象的start()方法來啟動該線程。

上述代碼中thread.currentthread()方法傳回目前正在執行的線程對象。getname()方法傳回調用該方法的線程的名字。

二、通過runnable接口建立線程類

(1)定義runnable接口的實作類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執行體。

(2)建立 runnable實作類的執行個體,并依此執行個體作為thread的target來建立thread對象,該thread對象才是真正的線程對象。

示例代碼為:

三、通過callable和future建立線程

(1)建立callable接口的實作類,并實作call()方法,該call()方法将作為線程執行體,并且有傳回值。

(2)建立callable實作類的執行個體,使用futuretask類來包裝callable對象,該futuretask對象封裝了該callable對象的call()方法的傳回值。

(3)使用futuretask對象作為thread對象的target建立并啟動新線程。

(4)調用futuretask對象的get()方法來獲得子線程執行結束後的傳回值

執行個體代碼:

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

采用實作runnable、callable接口的方式創見多線程時,優勢是:

線程類隻是實作了runnable接口或callable接口,還可以繼承其他類。

在這種方式下,多個線程可以共享同一個target對象,是以非常适合多個相同線程來處理同一份資源的情況,進而可以将cpu、代碼和資料分開,形成清晰的模型,較好地展現了面向對象的思想。

劣勢是:

程式設計稍微複雜,如果要通路目前線程,則必須使用thread.currentthread()方法。

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

編寫簡單,如果需要通路目前線程,則無需使用thread.currentthread()方法,直接使用this即可獲得目前線程。

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