1. 程式人生 > >建立多執行緒的幾種方法

建立多執行緒的幾種方法

多執行緒有幾種實現方法,分別是什麼?(建立執行緒的幾種方式)

多執行緒有三種實現方法:

1、繼承Thread類,重寫run()方法。然後直接new這個物件的例項,建立一個執行緒的例項,再呼叫start()方法啟動執行緒。(其實本質上Thread是實現了Runnable介面的一個例項,Thread原始檔:public class Thread implements Runnable

2、實現Runnable介面,重寫run()方法。然後呼叫new Thread(runnable)的方式建立一個執行緒,再呼叫start()方法啟動執行緒。

3、實現Callable介面,重寫call()方法。Callable是類似於Runnable的介面,是屬於Executor框架中的功能類。是JDK1.5中引入的新特性。(不常用,作為了解

引自於

  • Runnable和Callable的不同點:
  •         ①Callable規定的方法是call(),而Runnable規定的方法是run(). 
  •         ②Callable的任務執行後可返回值,而Runnable的任務是不能返回值的(有返回值用callable方法,無返回值用runnable方法
  •         ③call()方法可丟擲異常,而run()方法是不能丟擲異常的。 
  •         ④執行Callable任務可拿到一個Future物件,Future表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等
  •         待計算的完成,並檢索計算的結果.通過Future物件可瞭解任務執行情況,可取消任務的執行,還可獲取任務執行的結果

前兩種方法的詳細分析:

(1)繼承Thread類,重寫run()方法:

1、定義一個類繼承Thread類。

2、覆蓋Thread類中的run方法。


3、建立一個執行緒的例項(Thread類的子類物件)。


4、呼叫start方法啟動執行緒執行run方法。


(2)實現Runnable介面,重寫run()方法:

1、定義類實現Runnable介面。


2、重寫介面中的run()方法,將執行緒的任務程式碼封裝到run()方法中。


3、通過Thread類建立執行緒物件,並將Runnable介面的子類物件作為Thread類的建構函式的引數進行傳遞。

為什麼要進行引數傳遞?因為執行緒的任務都封裝在Runnable介面子類物件的run方法中,所以要線上程物件建立時就明確要執行的任務。


4、呼叫執行緒物件的start方法開啟執行緒。

實現Runnable介面的好處,優點:

1、實現Runnable介面的方法中執行緒類只是實現了Runnable介面,還可以繼承其他的類。避免的java單繼承的侷限性。

2、在這種方式下,可以多個執行緒共享一個Runnable物件,利於資源共享。適合多個相同的執行緒去處理同一份資源。

儘量使用實現Runnable介面的方法