1. 程式人生 > >Java基礎筆記之多執行緒

Java基礎筆記之多執行緒

1.    執行緒在程式中是獨立的,併發的執行流。當程序被初始化後,主執行緒就建立了。

2.    多執行緒程式設計的優點:

程序之間不能共享記憶體,但執行緒之間共享記憶體非常容易。

系統建立程序時需要為該程序重新分配系統資源,但建立執行緒則代價小得多,因此使用多執行緒來實現多工併發比多程序的效率高。

Java語言內建了多執行緒功能支援,而不是單純地作為底層作業系統的排程方式,從而簡化了Java的多執行緒程式設計。

3.    執行緒的建立和啟動

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。每個執行緒的作用是完成一定的任務,實際上就是執行一段程式流。Java使用執行緒執行體來代表這段程式流。

1>    繼承Thread類建立並啟動多執行緒

定義Thread類的子類,並重寫該類的run()方法,該方法的方法體就代表了執行緒需要完成的任務。因此把run()方法體稱為執行緒執行體;

建立Thread子類的例項,即建立了執行緒物件;

呼叫執行緒物件的start()方法來啟動該執行緒。

兩種方法獲取當前執行緒:

<1> Thread.currentThread(): currentThread()是Thread類的靜態方法,該方法總是返回當前正在執行的執行緒物件。

<2>  getName():  該方法是Thread類的例項方法,該方法返回該方法的執行緒名字。

[注*]  使用繼承Thread類的方法來建立執行緒類時,多個執行緒之間無法共享執行緒類的例項變數。

2>    實現Runnable藉口建立和啟動多執行緒

<1>  定義Runnable介面的實現類,並重寫該介面的run()方法,該run()方法的方法體同樣是該執行緒的執行緒執行體。

<2>  建立Runnable實現類的例項,並以此例項作為Thread類的target來建立Thread物件,該Thread物件才是真正的執行緒物件。

<3>  呼叫執行緒物件的start()方法來啟動該執行緒。

[注*]  Runnable物件僅僅作為Thread物件的target,Runnable實現類裡包含的run()方法僅作為執行緒執行體。而實際的執行緒物件依然是Thread例項,只是該Thread執行緒負責執行其target的run()方法。

3>    使用Callable和Future建立和啟動多執行緒

<1>  建立Callable介面的實現類,並實現call()方法,該call()方法將作為執行緒執行體,而且該call()方法有返回值。

<2>  建立Callable實現類的例項,使用FutureTask類來包裝Callable物件,該FutureTask物件封裝了該Callable物件的call()方法的返回值。

<3>  使用FutureTask物件作為Thread物件的target建立並啟動該執行緒。

<4>  呼叫FutureTask物件的get()方法來獲得子執行緒執行結束後的返返回值。

 推薦使用實現Runnable介面或Callable介面的方式建立多執行緒。因為實現介面還可以繼承其他類。