线程的状态
Posted 一朵花花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的状态相关的知识,希望对你有一定的参考价值。
前言:
线程状态和进程状态是类似的,进程状态是辅助进程进行调度,线程状态是辅助线程进行调度
Java 中线程的状态是通过一个 enum 来表示的
线程的所有状态
线程的状态是一个枚举类型 Thread.State
public static void main(String[] args)
for (Thread.State state : Thread.State.values())
System.out.println(state);
输出结果:
状态说明:
除了 NEW 和 TERMINATED 状态外,其他4个状态的 isAlive 结果都为 true
即,isAlive:判断内核中的线程是否存在
- NEW: Thread 对象有了,内核中的线程(PCB)还没有 即:任务布置了,还没有开始执行
- RUNNABLE: 就绪状态,表示当前线程正在CPU上执行,或者已经准备好随时上CPU,有一个专门的就绪队列来维护
- 下边这三个均表示 阻塞状态,当前线程暂时停了下来,不会继续到CPU上执行,表示正在排队 等到时机成熟,才有机会执行
BLOCKED: 等待锁导致
WAITING: wait 方法导致
TIMED_WAITING: sleep 方法导致 - TERMINATED: 内核中的线程已经结束(PCB已经被销毁),但是代码中的 Thread 对象还在(这个对象得等GC来回收)
线程状态和状态转移的意义
上图:
yield( ):主动放权,表示,让当前线程放弃 CPU 的执行权限,重新在就绪队列中排队。这个操作相当于:sleep(0)
NEW,RUNNABLE,TERMINATED 状态的转换 示例:
- 使用 isAlive 方法判定线程的存活状态
public static void main(String[] args)
Thread t = new Thread()
@Override
public void run()
for (int i = 0; i < 1000_0000; i++)
;
System.out.println("线程启动前: " + t.getState());
t.start();
while (t.isAlive())
System.out.println("线程正在运行中: " + t.getState());
System.out.println("线程结束后: " + t.getState());
输出结果:
截取前半部分,和后半部分…
后续在进行补充…
以上是关于线程的状态的主要内容,如果未能解决你的问题,请参考以下文章