线程状态及切换

线程状态

/**
 * 一个线程在给定的某个时刻,只能处在下面的6中状态中的一种。
 *
 * 这些状态是相对于虚拟机而言的,并不能反映出任何操作系统中线程状态。
 *
 */
public enum State {
    /**
     *
     * 新建状态
     *
     * 创建后还没有启动的线程处在NEW的状态;
     *
     * 而启动线程只有start()方法。也就是说还未调用start()方法的线程处在NEW的状态
     */
    NEW,

    /**
     *
     * 运行状态
     *
     * 处在此状态的线程有可能正在运行,也有可能正在等待CPU为它分配执行时间
     * 对于虚拟机而言,处在RUNNABLE状态的线程就是正在执行。
     *
     */
    RUNNABLE,

    /**
     *
     * 阻塞状态
     *
     * 处在阻塞状态的线程正在等待一个锁
     * 
     * 在程序等待进入同步区域的时候,线程将进入这种状态。
     * 
     *
     */
    BLOCKED,

    /**
     * 
     * 无限期等待状态
     * 
     * 线程进入无限期等待状态的原因是调用了下面三种方法之一:
     * ①没有设置Timeout参数的Object.wait()方法
     * ②没有设置Timeout参数的Thread.join()方法
     * ③LockSupport.park()方法
     * 
     * 
     */
    WAITING,
    /**
     * 
     * 限期等待状态
     * 
     * 线程进入限期等待状态的原因是调用了下面五种方法之一:
     * 
     * ①设置Timeout参数的Object.wait()方法
     * ②设置Timeout参数的Thread.join()方法
     * ③LockSupport.parkNanos()方法
     * ④LockSupport.parkUntil
     * ⑤Thread.sleep()方法
     * 
     */
    TIMED_WAITING,

    /**
     * 
     * 结束状态
     * 
     * 线程已经完成执行。
     */
    TERMINATED;
}

线程状态切换

Last updated