C語言中文網 目錄

Java線程的生命周期及線程的幾種狀態

線程也具有生命周期,主要包括 7 種狀態,分別是出生狀態就緒狀態運行狀態等待狀態休眠狀態阻塞狀態死亡狀態,如圖 1 所示。

線程生命周期圖
圖1 線程生命周期圖

下面對線程生命周期中的 7 種狀態做說明。
  1. 出生狀態:用戶在創建線程時所處的狀態,在用戶使用該線程實例調用 start() 方法之前,線程都處于出生狀態。
  2. 就緒狀態:也稱可執行狀態,當用戶調用 start() 方法之后,線程處于就緒狀態。
  3. 運行狀態:當線程得到系統資源后進入運行狀態。
  4. 等待狀態:當處于運行狀態下的線程調用 Thread 類的 wait() 方法時,該線程就會進入等待狀態。進入等待狀態的線程必須調用 Thread 類的 notify() 方法才能被喚醒。notifyAll() 方法是將所有處于等待狀態下的線程喚醒。
  5. 休眠狀態:當線程調用 Thread 類中的 sleep() 方法時,則會進入休眠狀態。
  6. 阻塞狀態:如果一個線程在運行狀態下發出輸入/輸出請求,該線程將進入阻塞狀態,在其等待輸入/輸出結束時,線程進入就緒狀態。對阻塞的線程來說,即使系統資源關閉,線程依然不能回到運行狀態。
  7. 死亡狀態:當線程的 run() 方法執行完畢,線程進入死亡狀態。

提示:一旦線程進入可執行狀態,它會在就緒狀態與運行狀態下輾轉,同時也可能進入等待狀態、休眠狀態、阻塞狀態或死亡狀態。

根據圖 1 所示,可以總結出使線程處于就緒狀態有如下幾種方法。
  • 調用 sleep() 方法。
  • 調用 wait() 方法。
  • 等待輸入和輸出完成。

當線程處于就緒狀態后,可以用如下幾種方法使線程再次進入運行狀態。
  • 線程調用 notify() 方法。
  • 線程調用 notifyAll() 方法。
  • 線程調用 intermpt() 方法。
  • 線程的休眠時間結束。
  • 輸入或者輸出結束。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo