文章目录
- 前言
- 状态图
- 状态变化说明
- 补充说明
前言
线程的生命周期指的是线程从创建出来到最终消亡的整个过程,以及过程中的状态变化。
状态图
以下图用mermaid语法绘制:
状态变化说明
java线程对象的所有状态存放在**Thread类的内部类(State)**中:
- 初始(NEW)
- 新创建了一个线程对象,但还没有调用start()方法
- 运行(RUNNABLE)
- Java线程中将就绪(READY) 和运行中(RUNNING) 两种状笼统的称为“可运行"
- 就绪(READY)
- 线程对象创建后,其他线程(比如main线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中并分配cpu使用权
- 运行中 (RUNNING)
- 就绪(READY)的线程获得了cpu 时间片,开始执行程序代码
- 阻塞(BLOCKED)
- 表示线程被锁阻塞时的状态。例如:多个线程竞争synchronized锁,有1个线程得到了锁,其他线程就是阻塞状态
- 等待(WAITING)
- 线程暂停运行,等待其他线程唤醒之后再继续执行。
- 进入方法,例如:thread.join(),Ojbect.wait(),LockSupport.park()方法
- 唤醒方法,例如:Object.notify()或者Object.notifyAll()
- 定时等待(TIMED_WAITING)
- 该状态不同于WAITING,它可以在指定的时间后自行恢复
- 进入方法,例如:Thread.sleep(long),Object.wait(long),thread.join(long),LockSupport.parkNanos,LockSupport.parkUntil
- 终止(TERMINATED)
- 表示该线程已经执行结束或者异常中断;
- 线程一旦终止,就不能再重启启动,否则报错(IllegalThreadStateException)
补充说明
在Thread类中过时的方法(因为存在线程安全问题,所以弃用了
- void suspend():暂停当前线程
- void resume():恢复当前线程
- void stop():结束当前线程