1. 程式人生 > >java基礎類庫學習(七.2)執行緒的生命週期

java基礎類庫學習(七.2)執行緒的生命週期

前言

利用java的類/介面建立好使用者執行緒後,我們呼叫執行緒物件的啟動方法,讓執行緒啟動

執行緒的生命週期:新建new 就緒runnable 執行running 阻塞blocked 死亡die

執行緒會在幾種狀態之間改變

新建new

執行緒類通過繼承Thread實現Runnable/Callable介面來建立,通過new建立執行緒類的例項時,該執行緒處於new新建狀態,執行緒物件在虛擬機器內被分配了記憶體,並初始化了成員變數的值,

就緒runnable

執行緒物件呼叫了start()方法,該執行緒處於就緒runnable狀態,java虛擬機器會為其建立方法呼叫棧和程式計數器,

執行running

由jvm裡執行緒排程器排程,處於就緒狀態的執行緒獲得了cpu,開始執行run()的方法體

阻塞blocked

但是不可能是一個執行緒一直在佔用虛擬機器,還需要提供給其他執行緒獲得處理機的機會,因此執行緒會進入阻塞狀態,給其他執行緒獲得處理機的機會,此執行緒會在合適的時候重新進入就緒狀態,再次等待排程器來排程它

注意:就緒和執行態之間的轉換通常不受程式控制,而是由系統排程所決定

(當處於就緒狀態的執行緒獲得處理器時,該執行緒進入執行狀態,當處於執行狀態的執行緒失去處理器時,執行緒進入就緒狀態)

死亡died

執行緒的run()/call()方法體結束,執行緒死亡

執行緒丟擲一個未捕獲的異常/error,執行緒死亡

執行緒物件呼叫stop()方法,執行緒死亡