首頁  >  文章  >  Java  >  java線程的幾種狀態是什麼

java線程的幾種狀態是什麼

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-12-27 14:53:105094瀏覽

java線程的幾種狀態是什麼

Java執行緒既可以創建,也可以銷毀,所以執行緒是有生命週期的,而執行緒的生命週期就可以用執行緒的六種狀態來描述。

從Thread類別的原始碼可以看出執行緒一共有6種狀態:

java線程的幾種狀態是什麼

這六種狀態分別是:

1. New:初始狀態,執行緒被創建,沒有呼叫start()。

2. Runnable:運作狀態,Java執行緒把作業系統中的就緒和執行兩種狀態統一稱為「運行中」。

3. Blocked:阻塞,執行緒進入等待狀態,執行緒因為某些原因,放棄了CPU的使用權。

阻塞的幾個情況:

A. 等待阻塞:運行的執行緒執行了wait(),JVM會把目前執行緒放入等待佇列。

B. 同步阻塞:執行的執行緒在取得物件的同步鎖定時,如果該同步鎖定被其他執行緒佔用了,JVM會將目前執行緒放入鎖定池中。

C. 其他阻塞:執行的執行緒執行sleep(),join()或發出IO請求時,JVM會把目前執行緒設為阻塞狀態,當sleep()執行完,join()執行緒終止,IO處理完畢線程再次恢復。

4. Waiting:等待狀態。

5. timed_waiting:逾時等待狀態,逾時以後會自動回傳。

6. terminated:終止狀態,目前執行緒執行完畢。

執行緒的六種狀態之間的轉換:

當實例化一個執行緒之後,先進入初始狀態,也就是New狀態,此時執行緒在啟動的時候並不是立刻就運行,而是要等到作業系統調度之後才運行,然後調用start()進入運行狀態,即runnable,其中運行狀態中包括運行(running)和就緒(ready)兩種狀態,這兩種狀態在作業系統的調度下可以互相轉換,如果運行中的線程時間片被CPU搶佔的話就會變成就緒狀態;運行中的線程通過調用synchronized方法或synchronized塊進入阻塞狀態,即blocked,當線程取得到鎖定之後進入運行狀態;如果執行緒在執行過程中呼叫了sleep(),wait().join(),Locksupported.parkUtil()等方法時,會進入等待狀態(waiting)或超時等待狀態,即timed_waiting,再次呼叫notify(),notifyAll(),Locksupported.unpark()等方法時,又會重新進入運行時狀態,當執行緒執行完成時,就進入了終止狀態,即terminated狀態。

註:Locksupported是JDK 1.6提供的工具類,在java.util.concurrent套件中,它所提供的park,unpark方法比wait,notify方法的靈活性更高。

透過命令列的方式查看執行緒狀態

先介紹兩個指令:

1. Jps:JDK 1.5提供的顯示目前所有Java進程pid的命令,可以取得對應的進程pid。

2. Jstack:是Java虛擬機器自帶的一種堆疊追蹤工具,他可以列印給定的進程pid資訊和遠端偵錯服務的Java堆疊資訊。

具體操作步驟:

開啟終端機或命令列工具,輸入jps命令,取得pid;

輸入jstack pid,查看目前進程的資訊.

java線程的幾種狀態是什麼

PHP中文網,有大量免費的JAVA入門教學,歡迎大家來學習!

以上是java線程的幾種狀態是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn