Java线程有6种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。这些状态由Thread.State枚举定义。
线程调用start()方法后会从NEW状态转换到RUNNABLE状态,表示线程已经准备好运行,等待CPU调度。
Thread.sleep()方法会让线程进入TIMED_WAITING状态,因为它指定了等待的时间。超时后线程会自动返回RUNNABLE状态。
当线程尝试获取synchronized锁失败时,会进入BLOCKED状态,直到获取到锁后才会返回RUNNABLE状态。
interrupt()方法只是设置线程的中断标志,不会立即停止线程。线程需要检查中断状态并自行决定如何响应中断。
以上方法都可以检查中断状态,但有区别:isInterrupted()不清除中断标志,interrupted()会清除中断标志。
Object.wait()方法会让线程进入WAITING状态,直到其他线程调用notify()或notifyAll()方法唤醒它。
RUNNABLE状态包含了操作系统层面的READY和RUNNING状态,线程可能正在运行,也可能在等待CPU时间片。