執行緒可以分為4個狀態:
new(新生),
runnable(可執行):為了方便分析,還可將其分為:runnable與running。
blocked(被阻塞),
dead(死亡)。
[img]
1,新生線程:
2,可執行執行緒:
(a)runnable:一旦呼叫了start方法,就進入到runnable狀態。
(b)running:在到runnable後,執行緒就有可能已經進入到了執行狀態;根據作業系統所提供的服務,在搶占式排程的系統中,系統給每個執行的執行緒乙個時間片來處理任務,而這個時間片用完後,作業系統將剝奪該執行緒的資源。這樣,在runnable與running之間是可以相互轉換的。所以從大的分類,這兩個是可以合併的。
3,被阻塞執行緒:
(1),當執行緒通過呼叫sleep方法進入睡眠狀態時。(類似的方法有yield(),join(),這些方法的使用在後面章節介紹)
(2),當執行緒通過呼叫wait方法時,進入阻塞。
(3),當執行緒呼叫的物件,試圖得到這個物件的鎖,而該鎖已經被其他執行緒持有。
(4),等待i/o操作。
(5),還有已經過時的suspend方法。
而從被阻塞狀態到可執行狀態。
(1),sleep睡眠時間已過。
(2),在呼叫wai方法後,又通過notify或notifyall方法喚醒。
(3),物件鎖已經釋放。
(4),i/o操作完成。
(5),對應過進的suspend對應的resume方法。
4,死執行緒
(1),因為run方法正常退出而自然死亡。
(2),因為乙個未捕獲的異常終止了run方法而使執行緒猝死。
(3),已經過時的stop方法。
java 執行緒 執行緒的狀態及其狀態的轉換
new 新建立執行緒,初始態 runnable 可執行狀態,當前狀態的執行緒位於 可執行執行緒池 中,變得可執行,只等待獲取cpu的使用權,即當前執行緒獲得了除cpu以外的所有資源。running 正在執行。此時執行緒獲得了cpu的使用權,執行程式 blocked 阻塞狀態。執行緒因為某種原因放棄了...
Java執行緒 4 執行緒狀態的轉換
執行緒的狀態轉換是執行緒控制的基礎。執行緒狀態總的可分為五大狀態 分別是生 死 可執行 執行 等待 阻塞。用乙個圖來描述如下 1 新狀態 執行緒物件已經建立,還沒有在其上呼叫start 方法。3 執行狀態 執行緒排程程式從可執行池中選擇乙個執行緒作為當前執行緒時執行緒所處的狀態。這也是執行緒進入執行...
java多執行緒 執行緒狀態轉換
img 1.新建 new 新建立了乙個執行緒物件。2.可執行 runnable 執行緒物件建立後,其他執行緒 比如main執行緒 呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取cpu 的使用權 3.執行 running 可執行狀態 runnable 的...