執行緒的狀態
執行緒有以下6種狀態:
New
(新創建)
Runnable
(可運行)
Blocked
(已封鎖)
Waiting
(等待)
Timed waiting
(計時等待)
Terminated
(已終止)
其中,要取得一個執行緒目前的狀態,可以呼叫getState 方法。
java相關影片推薦:java影片
#下面,對每個狀態進行解釋
1.新建立執行緒(New)
當我們使用new運算元來建立了一個執行緒時,如使用new Thread(r)時,執行緒還未開始執行,執行緒中的程式碼也沒有開始執行,此時就變成New狀態。
2.可運行執行緒(Runnable)
當我們對一個執行緒執行start()方法後,就會啟動該執行緒。但是注意,一個處於可運行狀態的執行緒可能正在運行也可能沒有運行,這時取決於作業系統的時間片調度。搶佔式調度系統會為每個執行緒分配一個時間片來運行,在時間片使用完後,作業系統就會剝奪它運行的權力,並更根據優先順序選擇下一個要運行的執行緒。
3.被阻塞、等待狀態(Blocked、waiting、Timed waiting)
當一個執行緒處於阻塞等待狀態時,它不做任何工作,也不執行任何程式碼。直到作業系統重新激活它。
當一個執行緒試圖取得一個內部物件鎖,而這個鎖又被其它執行緒持有時,該執行緒就進入阻塞狀態,當其它執行緒釋放這個鎖定後,並且執行緒調度器允許該執行緒持有它時,該線程將會變成非阻塞狀態。
當執行緒等待另一個執行緒通知調度器一個條件時,它本身就會進入等待狀態,再呼叫Object.wait方法或Thread.join方法時,就會出現這種情況。被阻塞狀態和等待狀態時大有不同的。
有幾個方法有一個逾時參數。呼叫它們導致執行緒進入計時等待狀態這一狀態將一直保存到超時期滿或接收到適當的通知。有超時參數的方法有:Thread.sleep
和Object.wait
、Thread.join
、 Lock,tryLock
以及Condition.await
的計時版。
4.被終止的執行緒
執行緒終止有兩種原因:
因為run()方法執行完畢正常退出
因為一個沒有捕獲的例外而終止了run方法導致意外死亡
#5.總結
相關文章教學推薦:java程式設計入門
#以上是java進階知識-線程的六種狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!