java多執行緒總結一 執行緒的兩種建立方式及優劣比較

2021-06-01 02:39:56 字數 2438 閱讀 3983

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...