【多線程】觀測線程狀態(tài) getState()
觀測線程狀態(tài) getState()
Thread.State(查看JDK幫助文檔)
-
線程狀態(tài)。線程可以處于以下狀態(tài)之一:
- [
NEW]
尚未啟動的線程處于此狀態(tài)。 - [
RUNNABLE]
在Java虛擬機中執(zhí)行的線程處于此狀態(tài)。 - [
BLOCKED]
被阻塞等待監(jiān)視器鎖定的線程處于此狀態(tài)。 - [
WAITING]
正在等待另一個線程執(zhí)行特定動作的線程處于此狀態(tài)。 - [
TIMED_WAITING]
正在等待另一個線程執(zhí)行動作達(dá)到指定等待時間的線程處于此狀態(tài)。 - [
TERMINATED]
已退出的線程處于此狀態(tài)。
一個線程可以在給定時間點處于一個狀態(tài)。 這些狀態(tài)是不反映任何操作系統(tǒng)線程狀態(tài)的虛擬機狀態(tài)。
- [
代碼示例:
/**
* @Description 觀察測試線程的狀態(tài)
* @Author hzx
* @Date 2022-03-26
*/
public class TestState {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("========線程執(zhí)行結(jié)束========");
});
//觀察狀態(tài)
Thread.State state = thread.getState();
System.out.println(state); //NEW 創(chuàng)建狀態(tài)
//觀察啟動后
thread.start(); //啟動線程
state = thread.getState();
System.out.println(state); //RUNNABLE 運行狀態(tài)
while (state != Thread.State.TERMINATED) {
Thread.sleep(100);
state = thread.getState(); //更新線程狀態(tài) (TIMED_WAITING-阻塞狀態(tài),TERMINATED-終止?fàn)顟B(tài))
System.out.println(state); //輸出狀態(tài)
}
//線程死亡后,再次啟動會報錯(死亡的線程不能再次啟動)
// thread.start();
}
}
執(zhí)行結(jié)果:
NEW
RUNNABLE
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
========線程執(zhí)行結(jié)束========
TERMINATED
線程死亡后,再次啟動報錯效果:


浙公網(wǎng)安備 33010602011771號