溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java線程有哪幾種狀態

發布時間:2020-06-10 11:45:54 來源:億速云 閱讀:373 作者:Leah 欄目:編程語言

這篇文章的知識點包括:java線程的簡介、java線程的狀態、java線程狀態之間的轉換以及查看java線程狀態的方法,閱讀完整文相信大家對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線程有哪幾種狀態

看完上述內容,你們對java中的線程狀態有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女