线程状态
作用:辅助线程进行调度
通过代码来显示一下各种线程状态
public class ThreadDemo1 {
public static void main(String[] args) {
for (Thread.State state : Thread.State.values()){
System.out.println(state);
}
}
}
Java 中线程的状态是通过一个 enum 来表示的
- NEW:Thread 对象有了,但是内核中的线程(PCB)还没有【相当于任务布置了,但是还没开始执行】
- RUNNABLE:就绪状态,当前线程正在 CPU 上执行或者已经准备好随时上 CPU ,有一个专门的就绪队列来维护
- BLOCKED、WAITING、TIMED_WAITING:阻塞状态。当前线程暂停下来,不会继续到 CPU 上执行,等到时机成熟才有机会执行,BLOCKED 对应等待锁,WAITTING 对应 wait,TIMED_WAITTING 对应 sleep
- TERMINATED:内核中的线程已经结束了(PCB 被销毁了),但是代码中的 Thread 对象还在(这个对象要等 GC 来回收)
- isAlive :线程存活。除了 NEW 和 TERMINATED 之外,其他状态都表示线程存活。(PCB 是否存活)
结构图
yield 方法表示主动放权:让当前线程放弃 CPU 的执行权限,重新的就绪队列中排队。(在 java 中用的不多)
整体就是各个状态都围绕着 RUUNABLE 而进行转换
通过一个代码来看一下线程的状态
public class ThreadDemo2 {
public static void main(String[] args) {
Thread t = new Thread(){
@Override
public void run(){
for (int i = 0; i < 10; i++) {
}
}
};
System.out.println("线程启动前: " + t.getState());
t.start();
while (t.isAlive()){
System.out.println("线程启动中: " + t.getState());
}
System.out.println("线程结束后: " + t.getState());
}
}
运行结果