2017第45周一java多線程創建方法
阿新 • • 發佈:2017-11-07
線程創建 程序 同步方法 創建 多個 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多線程創建方法