1、通過實現runnable介面執行緒建立
(1).定義乙個類實現runnable介面,重寫介面中的run()方法。在run()方法中加入具體的任務**或處理邏輯。
(2).建立runnable介面實現類的物件。
(3).建立乙個thread類的物件,需要封裝前面runnable介面實現類的物件。(介面可以實現多繼承)
(4).呼叫thread物件的start()方法,啟動執行緒
示例**:
package demo.thread;
public class treaddemo1 implements runnable
} public static void main(string args)
}
執行結果:
火箭發射前倒計時:
#thread-1(8)
#thread-1(7)
#thread-1(6)
#thread-1(5)
#thread-1(4)
#thread-1(3)
#thread-1(2)
#thread-1(1)
#thread-1(0)
#thread-0(9)
2、通過繼承thread類建立執行緒
(1).首先定義乙個類去繼承thread父類,重寫父類中的run()方法。在run()方法中加入具體的任務**或處理邏輯。
(2).直接建立乙個threaddemo2類的物件,也可以利用多型性,變數宣告為父類的型別。
(3).呼叫start方法,執行緒t啟動,隱含的呼叫run()方法。
示例**:
package demo.thread;
public class threaddemo2 extends thread
} public static void main(string args)
}
執行結果:
#thread-0(9)
#thread-0(8)
#thread-0(7)
#thread-0(6)
#thread-0(5)
#thread-0(4)
#thread-0(3)
#thread-0(2)
#thread-0(1)
#thread-0(0)
火箭發射前倒計時:
#thread-1(9)
#thread-1(8)
#thread-1(7)
#thread-1(6)
#thread-1(5)
#thread-1(4)
#thread-1(3)
#thread-1(2)
#thread-1(1)
#thread-1(0)
3、兩種方式的比較
首先分析兩種方式的輸出結果,同樣是建立了兩個執行緒,為什麼結果不一樣呢?
使用實現runnable介面方式建立執行緒可以共享同乙個目標物件(treaddemo1 tt=new treaddemo1();),實現了多個相同執行緒處理同乙份資源。
然後再看一段來自jdk的解釋:
runnable
介面應該由那些打算通過某一線程執行其實例的類來實現。類必須定義乙個稱為run
的無引數方法。
設計該介面的目的是為希望在活動時執行**的物件提供乙個公共協議。例如,thread
類實現了runnable
。啟用的意思是說某個執行緒已啟動並且尚未停止。
此外,runnable
為非thread
子類的類提供了一種啟用方式。通過例項化某個thread
例項並將自身作為執行目標,就可以執行實現runnable
的類而無需建立thread
的子類。大多數情況下,如果只想重寫run()
方法,而不重寫其他thread
方法,那麼應使用runnable
介面。這很重要,因為除非程式設計師打算修改或增強類的基本行為,否則不應為該類建立子類。
採用繼承thread類方式:
(1)優點:編寫簡單,如果需要訪問當前執行緒,無需使用thread.currentthread()方法,直接使用this,即可獲得當前執行緒。
(2)缺點:因為執行緒類已經繼承了thread類,所以不能再繼承其他的父類。
採用實現runnable介面方式:
(1)優點:執行緒類只是實現了runable介面,還可以繼承其他的類。在這種方式下,可以多個執行緒共享同乙個目標物件,所以非常適合多個相同執行緒來處理同乙份資源的情況,從而可以將cpu**和資料分開,形成清晰的模型,較好地體現了物件導向的思想。
(2)缺點:程式設計稍微複雜,如果需要訪問當前執行緒,必須使用thread.currentthread()方法。
java多執行緒總結一 執行緒的兩種建立方式及優劣比較
1 通過實現runnable介面執行緒建立 1 定義乙個類實現runnable介面,重寫介面中的run 方法。在run 方法中加入具體的任務 或處理邏輯。2 建立runnable介面實現類的物件。3 建立乙個thread類的物件,需要封裝前面runnable介面實現類的物件。介面可以實現多繼承 4 ...
JAVA多執行緒實現的兩種方式
繼承thread類的方法儘管被我列為一種多執行緒實現方式,但thread本質上也是實現了runnable介面的乙個例項,它代表乙個執行緒的例項,並且,啟動執行緒的唯一方法就是通過thread類的start 例項方法。start 方法是乙個native方法,它將啟動乙個新執行緒,並執行run 方法。這...
多執行緒 兩種方式建立執行緒
第一種方式 繼承thread類 public class threaddemo extends thread catch interruptedexception e if s 50 public static void main string args 第二種方式 實現runnable介面 pub...