Java執行緒的兩種建立方式及優劣比較

2021-06-19 09:51:52 字數 2379 閱讀 8567

1、通過實現runnable介面執行緒建立

(1).定義乙個類實現runnable介面,重寫介面中的run()方法。在run()方法中加入具體的任務**或處理邏輯。

(2).建立實現runnable介面的類的物件。

(3).建立乙個thread類的物件,需要封裝前面runnable介面實現類的物件。(介面可以實現多繼承)

(4).呼叫thread物件的start()方法,啟動執行緒。這種方式建立執行緒的源**如下所示:

public class runnabledemo 

}class taskdemo implements runnable

}}

執行結果:由於連個執行緒共享乙個任務,而且沒有同步操作,所以會出現下面的順序。

火箭發射前倒計時

#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-1(8)

#thread-0(0)

2、通過繼承thread類建立執行緒

(1).首先定義乙個類去繼承thread父類,重寫父類中的run()方法。在run()方法中加入具體的任務**或處理邏輯。

(2).直接建立乙個threaddemo類的物件,也可以利用多型性,變數宣告為父類的型別。

(3).呼叫start方法,執行緒啟動,隱含的呼叫run()方法。示例**如下所示:

public class threaddemo extends thread 

} public static void main(string args)

}

執行結果:由於兩個執行緒沒有共享任務,而且cpu排程順序不確定,所以出現如下執行結果,兩個執行緒有各自的執行路徑,不會共享。

#thread-0(9)

#thread-1(9)

#thread-1(8)

火箭發射前倒計時

#thread-1(7)

#thread-1(6)

#thread-1(5)

#thread-1(4)

#thread-1(3)

#thread-0(8)

#thread-0(7)

#thread-1(2)

#thread-1(1)

#thread-1(0)

#thread-0(6)

#thread-0(5)

#thread-0(4)

#thread-0(3)

#thread-0(2)

#thread-0(1)

#thread-0(0)

3、兩種方式的比較

首先分析兩種方式的輸出結果,同樣是建立了兩個執行緒,為什麼結果不一樣呢?

使用實現runnable介面方式建立執行緒可以共享同乙個目標物件(taskdemo demo = new taskdemo();),實現了多個相同執行緒處理同乙份資源。然後再看一段來自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多執行緒總結 執行緒的兩種建立方式及優劣比較

b size medium 1 通過實現runnable介面執行緒建立 size b 1 定義乙個類實現runnable介面,重寫介面中的run 方法。在run 方法中加入具體的任務 或處理邏輯。2 建立runnable介面實現類的物件。3 建立乙個thread類的物件,需要封裝前面runnable...

Java 建立執行緒的兩種方式

四個視窗同時賣票 因為是同時,所以使用多執行緒 建立4個執行緒,都是賣票 因為都是賣票,說明四個執行緒的任務是一樣的 只需要定義乙個類繼承thread 執行緒和執行緒任務是繫結在一起的 class ticket extends thread class test 為了解決四個執行緒共享票的問題,使用...

Java 建立執行緒的兩種方式

package com.etc.demo class threaddemo extends thread 啟動執行緒 呼叫thread類的start 方法 package com.etc.demo public class testthread 執行結果 每次的執行結果可能不同 主線程在執行.1 繼...