线程池原理

99 阅读1分钟

线程的状态

public enum State {
    /**
     * 新建状态,线程还未开始
     */
    NEW,

    /**
     * 可运行状态,正在运行或者在等待系统资源,比如CPU
     */
    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;
}