1. 程式人生 > >2.執行緒的生命週期

2.執行緒的生命週期

執行緒的生命週期

      執行緒是一個動態執行的過程,它也有一個從產生到死亡的過程。

(1)生命週期的五種狀態

新建(new Thread)

      當建立Thread類的一個例項(物件)時,此執行緒進入新建狀態(未被啟動)。 例如:Thread  t1=new Thread();

就緒(runnable)

     執行緒已經被啟動,正在等待被分配給CPU時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到CPU資源。例如:t1.start();

執行(running)

      執行緒獲得CPU資源正在執行任務(run()方法),此時除非此執行緒自動放棄CPU資源或者有優先順序更高的執行緒進入,執行緒將一直執行到結束。

死亡(dead)

      當執行緒執行完畢或被其它執行緒殺死,執行緒就進入死亡狀態,這時執行緒不可能再進入就緒狀態等待執行。

      自然終止:正常執行run()方法後終止

      異常終止:呼叫stop()方法讓一個執行緒終止執行

堵塞(blocked)

       由於某種原因導致正在執行的執行緒讓出CPU並暫停自己的執行,即進入堵塞狀態。

      正在睡眠:用sleep(long t) 方法可使執行緒進入睡眠方式。一個睡眠著的執行緒在指定的時間過去可進入就緒狀態。

      正在等待:呼叫wait()方法。(呼叫motify()方法回到就緒狀態)

      被另一個執行緒所阻塞:呼叫suspend()方法。(呼叫resume()方法恢復)

111

(2)執行緒建立有幾種方式

     1)繼承Thread類建立執行緒

     2)實現Runnable介面建立執行緒

     3)使用Callable和Future建立執行緒

 -------------三種建立執行緒方法對比--------------------

       實現Runnable和實現Callable介面的方式基本相同,不過是後者執行call()方法有返回值,後者執行緒執行體run()方法無返回值,因此可以把這兩種方式歸為一種這種方式與繼承Thread類的方法之間的差別如下:

  1. 執行緒只是實現Runnable或實現Callable介面,還可以繼承其他類。
  2. 這種方式下,多個執行緒可以共享一個target物件,非常適合多執行緒處理同一份資源的情形。
  3. 但是程式設計稍微複雜,如果需要訪問當前執行緒,必須呼叫Thread.currentThread()方法。
  4. 繼承Thread類的執行緒類不能再繼承其他父類(Java單繼承決定)。

注:一般推薦採用實現介面的方式來建立多執行緒