【操作系统】线程状态
线程状态
作用:辅助线程进行调度
通过代码来显示一下各种线程状态
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()); } }
运行结果
下一篇:
我把公众号所有的精华文章都整理出来了