執行緒在一定條件下,狀態會發生變化。執行緒一共有以下5種狀態:
1、新建狀態(new):新建立了乙個執行緒物件。
2、就緒狀態(runnable):執行緒物件建立後,其他執行緒呼叫了該物件的start()方法。該狀態的執行緒位於「可執行執行緒池」中,變得可執行,只等待獲取cpu的使用權。即在就緒狀態的程序除cpu之外,其它的執行所需資源都已全部獲得。
3、執行狀態(running):就緒狀態的執行緒獲取了cpu,執行程式**。
4、阻塞狀態(blocked):阻塞狀態是執行緒因為某種原因放棄cpu使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。
5、死亡狀態(dead):執行緒執行完了或者因遇到error或exception退出了run()方法,該執行緒結束生命週期。
注意:其中阻塞的情況分三種:
(1)、等待阻塞:執行的執行緒執行wait()方法,該執行緒會釋放占用的所有資源,jvm會把該執行緒放入「等待池」中。進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify()或notifyall()方法才能被喚醒,
(2)、同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒占用,則jvm會把該執行緒放入「鎖池」中。
(3)、其他阻塞:執行的執行緒執行sleep()或join()方法,或者發出了i/o請求時,jvm會把該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。
系統中線程之間的狀態轉換
執行緒在被建立後處於new狀態,當其他執行緒呼叫了新建立執行緒的start 方法,新執行緒就處於就緒 runnable 狀態,這個時候我們需要注意的時,此時執行緒並不能直接開始執行,它必須等待cpu資源,此時處於準備 ready 狀態,當其獲得cpu資源時,執行緒狀態轉變為執行 running 狀態...
執行緒之間和程序之間的同步
今天學習的內容為 利用互斥事件來控制線程之間 程序之間的同步問題。其實,程序之間的同步也就類似於執行緒之間的同步。互斥事件的作用就是為了保證任乙個時間內,只有乙個執行緒對對公共資源進行操作。下面來看一下執行緒之間的同步,如果是在乙個程序內的執行緒同步問題的話。這樣的例子很多,我就舉乙個最簡單的,執行...
執行緒的狀態以及狀態之間的相互轉換
新建狀態 new 新建立了乙個執行緒物件。就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。執行狀態 running 就緒狀態的執行緒獲取了cpu,執行程式 阻塞狀態 blocked 阻塞狀...