標籤:子線程 tar 傳回值 通過 面向 log callable div thread
一、繼承Thread類建立線程類
(1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務。因此把run()方法稱為執行體。
(2)建立Thread子類的執行個體,即建立了線程對象。
(3)調用線程對象的start()方法來啟動該線程。
二、通過Runnable介面建立線程類
(1)定義runnable介面的實作類別,並重寫該介面的run()方法,該run()方法的方法體同樣是該線程的線程執行體。
(2)建立 Runnable實作類別的執行個體,並依此執行個體作為Thread的target來建立Thread對象,該Thread對象才是真正的線程對象。
(3)調用線程對象的start()方法來啟動該線程。
三、通過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類,所以不能再繼承其他父類
Java建立線程的三種方式