Skip to content

Java 线程生命周期

Published: at 17:34:31

线程的状态有哪些?

源码Thread.State 说明一切

public enum State {
    // 才开始new  还没有调用start()方法
    NEW,

        // 可运行状态, 正在运行或者等待操作系统资源
    RUNNABLE,

        // 阻塞状态,在等待一个监视器锁(也就是我们常说的synchronized)
    //或者在调用了Object.wait()方法且被notify()之后也会进入BLOCKED状态
    BLOCKED,

        //等待状态,在调用了以下方法后进入此状态
    // 1. Object.wait()无超时的方法后且未被notify()前,如果被notify()了会进入BLOCKED状态
    // 2. Thread.join()无超时的方法后
    // 3. LockSupport.park()无超时的方法后
    WAITING,

    //超时等待状态,在调用了以下方法后会进入超时等待状态
    //1. Thread.sleep()方法后【本文由公从号“彤哥读源码”原创】
    //2. Object.wait(timeout)方法后且未到超时时间前,如果达到超时了或被notify()了会进入BLOCKED状态
    //3. Thread.join(timeout)方法后
    //4. LockSupport.parkNanos(nanos)方法后
    //5. LockSupport.parkUntil(deadline)方法后
    TIMED_WAITING,

        // 终止状态, 线程已经执行完毕
    TERMINATED;
}

线程状态流转图

untitled.jpg