推荐答案
在Java中,线程的生命周期包括以下状态:
- NEW(新建状态):线程对象被创建,但尚未启动。
- RUNNABLE(可运行状态):线程正在JVM中执行,但可能正在等待操作系统资源(如CPU)。
- BLOCKED(阻塞状态):线程因为等待监视器锁而处于阻塞状态。
- WAITING(等待状态):线程无限期等待另一个线程执行特定操作。
- TIMED_WAITING(超时等待状态):线程在指定的时间内等待另一个线程执行操作。
- TERMINATED(终止状态):线程已经执行完毕。
本题详细解读
NEW(新建状态)
当创建一个Thread对象时,线程处于NEW状态。此时线程尚未启动,start()方法还未被调用。
Thread thread = new Thread(); System.out.println(thread.getState()); // 输出: NEW
RUNNABLE(可运行状态)
当调用start()方法后,线程进入RUNNABLE状态。此时线程可能正在执行,或者正在等待CPU资源。
thread.start(); System.out.println(thread.getState()); // 输出: RUNNABLE
BLOCKED(阻塞状态)
线程在等待获取一个监视器锁时,进入BLOCKED状态。这种情况通常发生在多个线程竞争同一个锁时。
synchronized (lock) {
// 另一个线程尝试获取锁时会被阻塞
}WAITING(等待状态)
线程调用Object.wait()、Thread.join()或LockSupport.park()方法时,进入WAITING状态。此时线程会无限期等待,直到其他线程唤醒它。
synchronized (lock) {
lock.wait(); // 线程进入WAITING状态
}TIMED_WAITING(超时等待状态)
与WAITING状态类似,但线程在指定的时间内等待。调用Thread.sleep()、Object.wait(long timeout)、Thread.join(long millis)等方法时,线程进入TIMED_WAITING状态。
Thread.sleep(1000); // 线程进入TIMED_WAITING状态
TERMINATED(终止状态)
当线程的run()方法执行完毕或线程被强制终止时,线程进入TERMINATED状态。
thread.join(); System.out.println(thread.getState()); // 输出: TERMINATED