1、繼承Thread類創建線程
a. 定義Thread類的子類,並重寫該類的run方法
b. 創建Thread子類的實例
c. 調用start方法來啓動線程
2、 通過Runnable接口創建線程
a. 定義runnable接口的實現類,並重寫該接口的run方法
b. 創建Runnable實現類的實例,並依次實例作爲Thread的參數來創建Thread對象
c. 調用線程對象的start方法來啓動線程
3、通過Callable和Future創建線程
a. 創建接口的實現類,並實現call方法(與Runnable中的run方法類似)
b. 創建Callable實現類的實例,使用FutureTask類包裝Callable對象,該FutureTask對象封裝了Callable對象的call方法的返回值
c. 使用FutureTask對象作爲Thread對象的參數創建並啓動新線程
d. 調用FutureTask對象的get方法來獲取子線程執行結束後的返回值
二、創建線程三種方式對比
採用接口的優勢:線程只是實現了Runnable接口或Callable接口,還可以繼承其他類。
在這種方式下,多線程可以共享同一個參數(target)對象,
所以非常適合多個相同的線程來處理同一份資源的情況。
三、常用方法
Thread.sleep()------>哪個線程執行到sleep方法,哪個線程就sleep(sleep是靜態方法,不管調用者是誰,都是當前線程sleep)
interrupt()------>結束該線程當前的阻塞狀態
join()------>其他線程等待調用該方法的這個線程執行結束
Thread.yield()------>主動放棄cpu把機會讓給別的線程,然後參與競爭Running—>ready
四、注意
wait()方法和notify()方法都屬於 java.lang.Object 而不是 java.lang.Thread