线程在生命周期中会出现哪些不同状态?这几种状态的转换条件分别是什么?
时间: 2024-03-30 13:37:55 浏览: 8
线程在生命周期中会出现以下不同状态:
1. 新建状态(New):线程被创建但尚未启动。
2. 就绪状态(Runnable):线程被启动但尚未分配到CPU时间片,等待调度程序分配CPU时间。
3. 运行状态(Running):线程被分配到CPU时间片并正在执行。
4. 阻塞状态(Blocked):线程被阻塞,等待某些条件的发生(如等待IO操作完成、等待锁等)。
5. 等待状态(Waiting):线程等待某些条件的发生,但是不会主动去获取资源,需要其他线程唤醒。
6. 超时等待状态(Timed Waiting):线程等待一定的时间后会自动唤醒。
7. 终止状态(Terminated):线程执行完毕或出现异常而结束。
线程状态的转换条件如下:
1. 新建状态 -> 就绪状态:调用 start() 方法,启动线程。
2. 就绪状态 -> 运行状态:调度程序将该线程分配到CPU时间片。
3. 运行状态 -> 就绪状态:调度程序将该线程分配到CPU时间片后,时间片用完或调用 yield() 方法,线程从运行状态转换到就绪状态。
4. 运行状态 -> 阻塞状态:线程等待某些条件的发生。
5. 阻塞状态 -> 就绪状态:等待的条件发生后,线程重新进入就绪状态。
6. 运行状态、阻塞状态 -> 等待状态:调用 wait() 方法,线程进入等待状态。
7. 等待状态 -> 就绪状态:其他线程调用 notify() 或 notifyAll() 方法,唤醒等待的线程,使其进入就绪状态。
8. 运行状态、阻塞状态 -> 超时等待状态:调用 sleep()、join() 或 wait() 方法,并指定等待时间。
9. 超时等待状态 -> 就绪状态:等待时间到达,线程重新进入就绪状态。
10. 运行状态、就绪状态、阻塞状态 -> 终止状态:run() 方法执行完毕,或出现异常而结束。