Java線程及線程池狀態

1、Java線程的六種狀態函數

 

  1. 如上圖1,JDK定義線程狀態是不存在「運行中」狀態,但爲方便描述過程有些圖中會畫出運行中的狀態。
  2. Java線程建立後調用start方法進入就緒狀態,被OS調度選中後運行,運行結束或程序退出或拋異常時終止。
  3. 運行中線程調用Thread.yield()方法狀態切換爲可運行就緒狀態;運行中線程執行時遇到IO阻塞、調用Thread.sleep或其它線程對象join()方法時進入阻塞等待狀態;運行中線程遇到同步鎖方法時進入鎖池等待狀態。
  4. 線程從阻塞狀態、鎖池狀態、新建狀態、運行狀態均可以在相關條件知足時回到可運行就緒狀態,而後被OS調度選中進入運行狀態。

2、「VisualVM線程監控線程狀態」與「Java線程狀態」對應關係線程

經過VisualVM監控JVM時,能夠經過「線程」標籤頁查看JVM的線程信息,VisualVM的線程狀態以下:3d

經過dump thread stack,並與VisualVM監控信息中的線程名稱對應,找到的VisualVM每種線程狀態的線程堆棧對象

 3、Java線程池的五種狀態blog

  1. 線程池的初始化狀態是RUNNING,可以接收新任務,以及對已添加的任務進行處理。
  2. 線程池處在SHUTDOWN狀態時,不接收新任務,但能處理已添加的任務。 調用線程池的shutdown()接口時,線程池由RUNNING -> SHUTDOWN。
  3. 線程池處在STOP狀態時,不接收新任務,不處理已添加的任務,而且會中斷正在處理的任務。 調用線程池的shutdownNow()接口時,線程池由(RUNNING or SHUTDOWN ) -> STOP。
  4. 當全部的任務已終止,ctl記錄的」任務數量」爲0,線程池會變爲TIDYING狀態。當線程池變爲TIDYING狀態時,會執行鉤子函數terminated()。terminated()在ThreadPoolExecutor類中是空的,若用戶想在線程池變爲TIDYING時,進行相應的處理;能夠經過重載terminated()函數來實現。
  5. 當線程池在SHUTDOWN狀態下,阻塞隊列爲空而且線程池中執行的任務也爲空時,就會由 SHUTDOWN -> TIDYING。 當線程池在STOP狀態下,線程池中執行的任務爲空時,就會由STOP -> TIDYING。
  6. 線程池完全終止,就變成TERMINATED狀態。線程池處在TIDYING狀態時,執行完terminated()以後,就會由 TIDYING -> TERMINATED。
相關文章
相關標籤/搜索