天天看點

[Java] 實作多線程的兩種方法

版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!

通過實作runable接口;

通過繼承thread類本身。

1 .聲明實作 runnable 接口的類,該類然後實作 run 方法。然後可以配置設定該類的執行個體,在建立 thread 時作為一個參數來傳遞并啟動。例如,計算大于某一規定值的質數的線程可以寫成:

然後,下列代碼會建立并啟動一個線程:

2.将類聲明為 thread 的子類。該子類應重寫 thread 類的 run 方法。接下來可以配置設定并啟動該子類的執行個體。

  當 java 虛拟機啟動時,通常都會有單個非守護線程(它通常會調用某個指定類的 main 方法)。java 虛拟機會繼續執行線程,直到下列任一情況出現時為止: 

調用了 runtime 類的 exit 方法,并且安全管理器允許退出操作發生。

非守護線程的所有線程都已停止運作,無論是通過從對 run 方法的調用中傳回,還是通過抛出一個傳播到 run 方法之外的異常。

3.使用和差別

  runable源碼: 

  thread 類實作了 runnable。激活的意思是說某個線程已啟動并且尚未停止。此外,runnable 為非 thread 子類的類提供了一種激活方式。通過執行個體化某個 thread 執行個體并将自身作為運作目标,就可以運作實作 runnable 的類而無需建立 thread 的子類。大多數情況下,如果隻想重寫 run() 方法,而不重寫其他 thread 方法,那麼應使用 runnable 接口。這很重要,因為除非程式員打算修改或增強類的基本行為,否則不應為該類建立子類。

  繼承thread類實作多線程,要求放入多線程中的類不能繼承其他類(java的單繼承特性),如果需要請用 runnable 實作(接口可以多實作并不影響繼承其他類)。 

一個實作runnable接口的類可以放在多個線程中執行,多個線程可以去執行同一資源;而繼承thread隻能實作多個線程分别去處理自己的資源。(通過runnable建立的多個線程可以由程式設計人員傳入同一個runnable對象,即執行同一個run方法,而通過thread建立的多線程它們運作的都是自己的run方法)。