关于Java 线程的运行状态

本文详细解析了JVM线程的六种状态:NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING和TERMINATED,并介绍了每种状态的触发条件及相关的API方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要说明的是,所指状态为JVM线程状态,而非操作系统线程状态。同一时间,一个线程只会存在于一种状态。

线程状态,enum State:

1、NEW

已创建,未运行。

2、RUNNABLE

线程于JVM中运行中。

3、BLOCKED

阻塞等待 monitor lock 以进入或重新进入 synchronized 同步块或方法,由Object.wait 触发。

4、WAITING

触发方法: Object.wait、join()、 LockSupport.park

等待另外的线程执行完特定的任务。

例如:
线程执行Object.wait,等待另一线程执行完,并通过执行Object.notify 或者 Object.notifyAll来唤醒以继续执行;

线程执行Thread.join,等待特定线程执行完毕。

5、TIMED_WAITING

时限等待。

触发方法:Thread.sleep、Object.wait(timeout)、Thread.join(timeout)、LockSupport.parkNanos、LockSupport.parkUntil。

6、TERMINATED

已执行完任务的线程状态。

附注:

1、线程 Thread.getState 方法获取当前线程状态。此方法是涉及用来监控系统状态,而不是用于同步控制。

2、Unsafe.park方法挂起线程。

3、Thread.join 方法内部通过循环调用Object.wait方法来实现等待。

4、BLOCKED 状态强调是为了进入同步逻辑而等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windwant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值