(一) 线程共有六种状态
//取自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)
网友评论