🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 线程有哪些基本状态? Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态 ![](https://img.kancloud.cn/69/75/6975804f07127a11e08ad1a3dee6a72f_955x251.png) 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示: ![](https://img.kancloud.cn/0d/f5/0df5689562c226d5e0716b4a2ddc17a8_951x646.png) 线程创建之后它将处于**NEW(新建)**状态,调用`start()`方法后开始运行,线程这时候处于**READY(可运行)**状态。 <hr> 可运行状态的线程获得了 cpu 时间片(timeslice)后就处于**RUNNING(运行)**状态。 <hr> 当线程执行`wait()`方法之后,线程进入 **WAITING(等待)**状态。 进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态, 而**TIME_WAITING(超时等待)**状态相当于在等待状态的基础上增加了超时限制,比如通过`sleep(long millis)`方法或`wait(long millis)`方法可以将 Java 线程置于 TIMED WAITING 状态。 <hr> 当超时时间到达后 Java 线程将会返回到 RUNNABLE 状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到**BLOCKED(阻塞)**状态。 <hr> 线程在执行 Runnable 的`run()`方法之后将会进入到**TERMINATED(终止)**状态。