1. 程式人生 > >2017第45周一java多線程創建方法

2017第45周一java多線程創建方法

線程創建 程序 同步方法 創建 多個 java對象 代碼 方式 方法

1. 從JDK1.5開始,Java提供了3種方式來創建,啟動多線程:

Ø 繼承Thread類來創建線程類,重寫run()方法作為線程執行體。

Ø 實現Runnable接口來創建線程類,重寫run()方法作為線程執行體。

Ø 實現Callable接口來創建線程類,重寫run()方法作為線程執行體。

其中第一種方式效果最差,它有2點壞處:

l 線程類繼承了Thread類,無法在繼承其他父類。

l 因為每條線程都是一個Thread子類的實例,因此多個線程之間共享數據比較麻煩。

對於第二三種方式,它們的本質是一樣的,只是Callable接口裏包含的call()方法既可以聲明拋出異常,也可以擁有返回值。

2.此外啟動線程應該使用start()方法,而不是run()方法。如果程序從未調用線程對象的start()方法來啟動它,那麽這個線程對象將一直處於”新建”狀態(1.新建 2.就緒 3.運行 4.阻塞 5.死亡總共5個狀態),它永遠也不會作為線程獲得執行的機會,它只是一個普通的Java對象。當程序調用線程對象的run()方法時,與調用普通Java對象的普通方法並無任何區別,因此絕對不會啟動一條新線程的。

3. 靜態的同步方法:

Java語言規定:任何線程進入同步方法,同步代碼塊之前,必須先獲取同步方法,同步代碼塊對應的同步監視器。對於同步代碼塊而言,程序必須顯示為它指定同步監視器;對於同步非靜態方法而言,該方法的同步監視器是this-即調用該方法的Java對象;對於靜態的同步方法而言,該方法的同步監視器不是this,而是該類本身。

2017第45周一java多線程創建方法