文章目录
线程的状态
在操作系统中,对于PCB有一个状态的描述
Java中觉得自带的状态不是特别合适,自己又搞了一套状态规则
一共有六种状态:
NEW
: Thread对象创建出来了,但是内核的PCB还没创建(还没真正创建线程)
TERMINATED
: 内核的PCB销毁了,但是Thread对象还在
RUNNABLE
: 就绪状态(正在CPU上运行+在就绪队列中排队)以下是阻塞状态:
TIMED_WAITING
: 按照一定的时间,进行阻塞 (sleep,join(时间))
WAITING
: 特殊的阻塞状态,调用wait/join()
BLOCKED
: 等待锁的时候进入的阻塞状态
线程状态转移图:
借鉴了一个在网上看到的很好的图:
观察线程的状态和转移
举个例子:
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()-> {
for (int i = 0; i < 10_0000_0000; i++) {
//无事发生
}
});
//NEW
System.out.println(thread.getState());
thread.start();
//RUNNABLE
System.out.println(thread.getState());
thread.join();
//TERMINATED
System.out.println(thread.getState());
}
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()-> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
//NEW
System.out.println(thread.getState());
thread.start();
Thread.sleep(50);
//TIMED_WAITING
System.out.println(thread.getState());
thread.join();
//TERMINATED
System.out.println(thread.getState());
}