1. 程式人生 > >執行緒(一)執行緒的生命週期

執行緒(一)執行緒的生命週期

執行緒是存在生命週期的,從執行緒的建立到銷燬,可能會經歷6種不同的狀態,但是在一個時刻執行緒只能處於其中一種狀態

  • NEW:初始狀態,執行緒被建立時候的狀態,還沒有呼叫start方法
  • RUNNABLE:執行狀態,執行狀態包含就緒和執行兩種狀態,因為執行緒啟動以後,並不是立即執行,而是需要通過排程去分配CPU時間片
  • BLOCKED:阻塞狀態,當執行緒去訪問一個加鎖的方法時,如果已經有其他執行緒獲得鎖,那麼當前執行緒會處於阻塞狀態
  • WAITING:等待狀態,設定執行緒進入等待狀態等待其他執行緒做一些特定的動作進行觸發
  • TIME_WAITING:超時等待狀態,和WAITING狀態的區別在於超時以後自動返回
  • TERMINATED:終止狀態,執行緒執行完畢

 

 

1.這裡有一個問題大家可能搞不明白,BLOCKED和WAITING這兩個阻塞有什麼區別?

 

  • BLOCKED狀態是指當前執行緒在等待一個獲取鎖的操作時的狀態。
  • WAITING是通過Object.wait或者Thread.join、LockSupport.park等操作實現的
  • BLOCKED是被動的標記,而WAITING是主動操作
  • 如果說得再深入一點,處於WAITING狀態的執行緒,被喚醒以後,需要進入同步佇列去競爭鎖操作,而在同步佇列中,如果已經有其他執行緒持有鎖,則執行緒會處於BLOCKED狀態。所以可以說BLOCKED狀態是處於WAITING狀態的執行緒重新喚醒的必經的狀態

 

2.並行和併發有什麼區別?

並行:同時執行多個任務,在多核心CPU架構中,一個CPU核心執行一個執行緒,那麼4核心CPU,可以同時執行4個執行緒

併發:同處理多個任務的能力,通常我們會通過TPS或者QPS來表示某某系統支援的併發數是多少。