请说明Java中线程生命周期的定义,包括其状态划分及各状态之间的转换条件。
考察说明
考查对Java线程状态模型的理解及并发编程基础。
回答思路
- 【回答框架 1】Java线程生命周期由Thread.State枚举定义,包含NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED六种状态。NEW是创建后未启动,调用start()后进入RUNNABLE。
- 【回答框架 2】RUNNABLE状态涵盖可运行和正在运行,依赖操作系统调度。当线程尝试获取锁但未获得时进入BLOCKED;获得锁后回到RUNNABLE。
- 【回答框架 3】WAITING状态由无时限的wait、join或park触发,需外部唤醒;TIMED_WAITING由sleep、带超时的wait或join触发,超时自动返回。
- 【回答框架 4】TERMINATED是线程执行完run方法或抛出未捕获异常后的终态。状态转换依赖JVM和操作系统,实际状态可能受调度影响。
- 【关键点 1】线程状态由Thread.State枚举定义,共六种。
- 【关键点 2】start()使线程从NEW转为RUNNABLE,不能重复调用。
- 【关键点 3】BLOCKED与WAITING的区别在于是否等待锁。
- 【关键点 4】WAITING需显式唤醒,TIMED_WAITING可自动超时。
- 【关键点 5】TERMINATED后线程不可再被启动。
- 【易错点 1】不要将RUNNABLE误解为仅运行中,它包含可运行。
- 【易错点 2】不要混淆sleep和wait,sleep不释放锁。
- 【易错点 3】不能在线程死后重新start,会抛IllegalThreadStateException。