并发总结(三)关于线程状态

2018-04-30  本文已影响0人  杭州痞老板

(一) 线程共有六种状态

//取自Thread$State
public enum State {
        /**
         * 线程未完全创建时
         */
        NEW,
        /**
         * 该线程只要不阻塞在监视器锁上,不被挂起,不休眠就是Runnable状态
         * 线程可往下执行或者阻塞在其他资源上(网络传输,读取磁盘数据等)
         */
        RUNNABLE,//可运行状态
        /**
         * 在对象的锁池中竞争锁(on object monitor)
         */
        BLOCKED,//阻塞
        /**
         *  在对象的等待池中等通知(on object monitor) 
         *  线程被挂起(park)
         */
        WAITING,//等待
        /**
         * 在对象的等待池中限时等通知(on object monitor)
         * 线程被限时挂起(park)
         * 线程休眠(sleep)
         */
        TIMED_WAITING//限时等待
        /**
         * 线程已终止
         */
        TERMINATED;
}

(二)与锁相关的线程状态

2.1 当线程在对象的锁池中竞争锁时,状态为 BLOCKED
2.2 当线程在对象的等待池中等待其他线程的通知时,状态为:WAITINT(on object monitor)、TIMED_WAITING(on object monitor),等收到通知之后便从等待池中进入锁池
2.3 线程在等待Reentrantlock锁,Semaphore互斥量等并发工具类时,由于绝大多数类的内部都是通过挂起线程来实现等待,所以线程状态为WAITTING(park)、TIMED_WAITING(park)
上一篇 下一篇

猜你喜欢

热点阅读