1、繼承Thread類建立線程類編程
(1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代 表了線程要完成的任務。所以把run()方法稱爲執行體。
(2)建立Thread子類的實例,即建立了線程對象。
(3)調用線程對象的start()方法來啓動該線程。多線程
2、經過Runnable接口建立線程類架構
(1)定義runnable接口的實現類,並重寫該接口的run()方法,該run()方法的方法體是該線程的線程執行體。
(2)建立 Runnable實現類的實例,並依此實例做爲Thread的target來建立Thread對象,該Thread對象纔是真正的線程對象。
(3)調用線程對象的start()方法來啓動該線程。併發
3、經過Callable和Future建立線程分佈式
(1)建立Callable接口的實現類,並實現call()方法,該call()方法將做爲線程執行體,而且有返回值。
(2)建立Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
(3)使用FutureTask對象做爲Thread對象的target建立並啓動新線程。
(4)調用FutureTask對象的get()方法來得到子線程執行結束後的返回值,調用get()方法會阻塞線程。微服務
(5)加q羣:834962734 可獲取一份Java架構進階學習資源(高併發+Spring源碼+JVM原理解析+分佈式架構+微服務架構+多線程併發原理等...這些成爲架構師必備的內容)以及Java進階學習路線圖。高併發
建立線程的三種方式的對比:
繼承Thread類的方式建立多線程
優點:編寫簡單,若是須要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this便可得到當前線程。
劣勢是:線程類已經繼承了Thread類,因此不能再繼承其餘父類。學習
實現Runnable、Callable接口的方式創見多線程
優點是:線程類只是實現了Runnable接口或Callable接口,還能夠繼承其餘類。在這種方式下,多個線程能夠共享同一個target對象,適合多個相同線程來處理同一份資源的狀況。
劣勢是:編程稍微複雜,若是要訪問當前線程,則必須使用Thread.currentThread()方法。this