閱讀這篇文章,你將會了解
1.Java線程有什麼狀態,以及狀態扭轉的方式
2.Java線程的中斷對於各個狀態的Java線程有什麼效果。
一.Java線程的狀態:
- 線程的中斷不屬於線程的狀態,中斷是一種操作,當用戶不希望某個線程繼續執行時,可以通過中斷機制去完成這個事情。但是,Java線程的中斷對於各個狀態的Java線程有不一樣的效果。
- Java線程有6個狀態,可以進入源碼Thread.java查看。
狀態 | 擁有cpu執行時間 | 描述 |
---|---|---|
NEW | 無 | 創建新線程,還未啓動時 |
RUNNABLE | RUNNING:有 READY:無 |
運行狀態,實質上包括了傳統線程中的2個狀態 (1)RUNNING:運行中 (2)READY:就緒,等待資源(例如cpu時間片) |
BLOCKED | 有 | 阻塞,線程在等待monitor lock(監視器鎖) |
WAITING | 無 | 等待,直到被喚醒 |
TIMED_WAITING | 無 | 超時等待,達到一定時間後會自動喚醒 |
TERMINATED | 無 | 終止,線程已經執行完畢 |
二.Java線程的狀態扭轉
圖片來源:https://blog.csdn.net/pange1991/article/details/53860651/
三.Java線程的中斷
1. 線程中斷的方法
方法名 | 描述 |
---|---|
public boolean isInterrupted() | 返回是否中斷,不做其他事情 |
public void interrupt() | 設置中斷標誌位 |
public static boolean interrupted() | 返回中斷標誌位,並清除中斷標誌位 |
2. Java線程不同狀態下中斷機制的效果
狀態 | 中斷效果 | 描述 |
---|---|---|
NEW | 無 | |
RUNNABLE | 設置中斷標誌位 | 用戶自己判斷是否中斷,以及如何處理 |
BLOCKED | 設置中斷標誌位 | 用戶自己判斷是否中斷,以及如何處理 |
WAITING | 拋InterruptedException異常,並清空中斷標誌位 | |
TIMED_WAITING | 拋InterruptedException異常,並清空中斷標誌位 | |
TERMINATED | 無 |