2.1 线程状态简介
在java.lang.Thread.State中能清楚的看到Java中定义了6种状态:
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,
/**
* Thread state for a runnable thread. A thread in the runnable
* state is executing in the Java virtual machine but it may
* be waiting for other resources from the operating system
* such as processor.
*/
RUNNABLE,
- New:尚未启动的线程的线程状态
- Runnable:可运行的线程状态,等待CPU调度
- BLOCKED:线程阻塞等待获取监视器锁的线程状态(处于synchronized同步代码块或方法中被阻塞)
- WAITING:等待线程的线程状态(不带超时的方式:Object.wait、Thread.join、LockSupport.park)
- TIMED_WAITING:具有指定等待时间的等待线程的线程状态。(带超时方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil)
- TERMINATED:终止线程的线程状态。线程正常完成执行或出现异常(接收到中断指令)
2.2 线程状态间的切换
线程间的状态切换2.2.1 新建-运行-终止(示例)
运行结果
2.2.2 新建->运行->等待->运行->终止(示例)
运行结果
2.2.3 新建->运行->阻塞->运行->终止(示例)
运行结果
这里主线程等待200ms的时候,主线程拿到ThreadStateSwitch的对象锁是没有被释放的,在blockThreadState的方法中的同步块运行完之后,thread3才能拿到对象锁。
网友评论