快捷搜索: 王者荣耀 脱发

【操作系统】线程状态

线程状态

作用:辅助线程进行调度

通过代码来显示一下各种线程状态

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

运行结果

经验分享 程序员 微信小程序 职场和发展