在 Java 中,线程的生命周期可以细化为以下几个状态:
New(初始状态):线程对象创建后,但未调用 start() 方法。
Runnable(可运行状态):调用 start() 方法后,线程进入就绪状态,等待 CPU 调度。
Blocked(阻塞状态):线程试图获取一个对象锁而被阻塞。
Waiting(等待状态):线程进入等待状态,需要被显式唤醒才能继续执行。
Timed Waiting(含等待时间的等待状态):线程进入等待状态,但指定了等待时间,超时后会被唤醒。
Terminated(终止状态):线程执行完成或因异常退出。
而 Blocked、Waiting、Timed Waiting 其实都属于休眠状态。
一开始线程新建的时候就是初始状态,还未 start。
调用可运行状态就是可以运行——可能正在运行,也可能正在等 CPU 时间片。
造成线程等待的操作有:Object.wait
、Thread.join
、LockSupport.park
含等待时间的等待就是上面这些操作设置了 timeout 参数的方法,例如:Object.wait(1000)
操作系统中线程的生命周期通常包括以下五个阶段: