线程的生命周期
线程的生命周期
- 线程的生命周期主要有七个状态:
- 新建(New)
- 就绪(Runnable)
- 运行(Running)
- 阻塞(Blocked)
- 等待(Waiting)
- 超时等待(Timed Waiting)
- 终止(Terminated)
- Java中将操作系统中的
- 就绪状态/运行状态转化为一个状态Runnable
- 阻塞状态细分为了三种
- BlOCKED
- WAITING
- TIMED_WAITING
1. 新建(New)
- 线程对象被创建但尚未启动。使用
new Thread()创建线程后,线程处于新建状态。
2. 就绪(Ready)
- 线程已经被启动,等待系统资源。使用
start()方法启动线程后,线程进入就绪状态,等待CPU调度。
3. 运行(Running)
- 线程获得CPU时间片,开始执行
run()中的代码。
4. 阻塞(Blocked)
- 现成因为某些原因放弃了CPU使用权。可能是等待某个资源、等待I/O操作完成、或者调用
sleep()等。
5. 等待(Waiting)
- 线程进入等待状态,直到被其他线程唤醒。可以通过调用
Object.wait()、Thread.join()、LockSupport.park()方法进入等待状态。
6. 超时等待(Timed Waiting)
- 线程等待一段时间,当时间到达或者其他条件满足时,线程会重新进入就绪状态。通过
Thread.sleep()、Object.wait(timeout)、Thread.join(timeout)、LockSupport.parkNanos()等方式可进入超时等待状态。
7. 终止(Terminated)
- 线程执行完
run()方法或者因异常退出后,进入终止状态。
8. 线程生命周期图示


- 注意:在操作系统层面线程有
Ready和Running两个状态,在JVM层面,只能看到Runnable状态,这是因为现在的操作系统基本上都是使用“时间分片”方式进行抢占式轮转调度,而时间分片通常都很小,线程切换太快,区分这两种状态就没意义了
