线程的状态

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());

输出结果:

截取前半部分,和后半部分…

后续在进行补充…

以上是关于线程的状态的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家

JavaSE线程基础

java BottomBarNavigation代码保留片段状态

python多线程

仅在一个片段中隐藏状态栏并在其他片段中显示