在Java中,线程的生命周期描述了线程从创建到终止的整个过程。
在Java中,线程的生命周期可以分为六种状态:新建状态(New)、可运行状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、等待状态(Waiting)、计时等待状态(Timed Waiting)和终止状态(Terminated)。线程从新建状态开始,通过调用start()
方法进入可运行状态,等待调度器选择运行。运行状态的线程可能因等待锁或I/O操作进入阻塞状态,或通过调用wait()
、join()
等方法进入等待状态。计时等待状态的线程在指定时间后自动恢复。线程的run()
方法执行完毕或因异常终止时,线程进入终止状态。
1. 新建状态(New)
当一个线程对象被创建时,它处于新建状态。此时,线程还没有开始执行。
Thread myThread = new Thread(); // 新建状态
2. 可运行状态(Runnable)
当调用线程的start()
方法时,线程进入可运行状态。在这个状态下,线程已经准备好运行,但具体何时运行由线程调度器决定。
myThread.start(); // 可运行状态
3. 运行状态(Running)
线程调度器选择一个可运行状态的线程并让它运行时,该线程进入运行状态。在这个状态下,线程的run()
方法正在执行。
4. 阻塞状态(Blocked)
线程在某些情况下会进入阻塞状态,例如等待获取一个锁、等待输入/输出操作完成等。阻塞状态的线程不会占用CPU时间。
synchronized (lock) {
// 可能进入阻塞状态
// 代码
}
5. 等待状态(Waiting)
线程可以通过调用Object.wait()
、Thread.join()
或LockSupport.park()
等方