Java中建立線程主要有三種方式:java
1、繼承Thread類建立線程類編程
(1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就表明了線程要完成的任務。所以把run()方法稱爲執行體。多線程
(2)建立Thread子類的實例,即建立了線程對象。app
(3)調用線程對象的start()方法來啓動該線程。ide
[java] view plain copythis
上述代碼中Thread.currentThread()方法返回當前正在執行的線程對象。GetName()方法返回調用該方法的線程的名字。spa
2、經過Runnable接口建立線程類.net
(1)定義runnable接口的實現類,並重寫該接口的run()方法,該run()方法的方法體一樣是該線程的線程執行體。線程
(2)建立 Runnable實現類的實例,並依此實例做爲Thread的target來建立Thread對象,該Thread對象纔是真正的線程對象。對象
(3)調用線程對象的start()方法來啓動該線程。
示例代碼爲:
[java] view plain copy
3、經過Callable和Future建立線程
(1)建立Callable接口的實現類,並實現call()方法,該call()方法將做爲線程執行體,而且有返回值。
(2)建立Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
(3)使用FutureTask對象做爲Thread對象的target建立並啓動新線程。
(4)調用FutureTask對象的get()方法來得到子線程執行結束後的返回值
實例代碼:
[java] view plain copy
2、建立線程的三種方式的對比
採用實現Runnable、Callable接口的方式創見多線程時,優點是:
線程類只是實現了Runnable接口或Callable接口,還能夠繼承其餘類。
在這種方式下,多個線程能夠共享同一個target對象,因此很是適合多個相同線程來處理同一份資源的狀況,從而能夠將CPU、代碼和數據分開,造成清晰的模型,較好地體現了面向對象的思想。
劣勢是:
編程稍微複雜,若是要訪問當前線程,則必須使用Thread.currentThread()方法。
使用繼承Thread類的方式建立多線程時優點是:
編寫簡單,若是須要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this便可得到當前線程。
劣勢是:
線程類已經繼承了Thread類,因此不能再繼承其餘父類。