线程状态详解
2026/4/23 0:55:26 网站建设 项目流程

java.lang.Thread.State枚举了六种线程状态,可以调用Thread类的getState()方法获取当前线程的状态

一:NEW(新建)

  • 线程被创建但尚未启动

  • 例如:Thread t = new Thread();后,未调用t.start()

二:RUNNABLE(可运行)

  • 线程正在 JVM 中执行,但可能正在等待操作系统的资源(如 CPU)。

  • 包括就绪(ready)运行中(running)两个子状态。

  • 例如:调用start()后,线程可能正在运行或等待 CPU 时间片。

三:BLOCKED(阻塞)

  • 线程被阻塞,等待监视器锁(monitor lock)进入同步块/方法。

  • 通常发生在竞争synchronized锁时,其他线程持有该锁。

  • 注意:与Object.wait()导致的等待不同。

四:WAITTING(等待)

  • 线程无限期等待其他线程的特定动作。

  • 进入此状态的方法:

    • Object.wait()(未指定超时)

    • Thread.join()(未指定超时)

    • LockSupport.park()

  • 需要其他线程通过notify()/notifyAll()或指定条件来唤醒

五:TIME_WAITTING(限时等待)

  • WAITING类似,但设置了最大等待时间。

  • 进入此状态的方法:

    • Thread.sleep(time)

    • Object.wait(timeout)

    • Thread.join(timeout)

    • LockSupport.parkNanos()

六:TERMINATED(终止)

  • 线程已执行完毕(run()方法结束)或异常退出。

  • 不可再次启动(调用start()会抛异常)。

七:补充

  • BLOCKED 与 WAITING 的区别

    • BLOCKED是等待获取synchronized 锁

    • WAITING/TIMED_WAITING是主动调用等待方法(如wait()join())。

  • RUNNABLE 状态:在 Java 层面,线程是否正在占用 CPU 由操作系统调度决定,JVM 统一视为RUNNABLE

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询