当前位置: 首页 > news >正文

多线程:6种状态及其转换条件

根据Thread类的源码,Java线程共有6种状态

一,NEW(新建状态)

线程被创建但尚未启动的状态。

当使用`new Thread()`创建一个线程对象后,但还没有调用`start()`方法时,线程就处于NEW状态。此时线程已经分配了内存空间,但还没有开始执行。

Thread thread = new Thread(() -> {
System.out.println("线程执行中");
});
System.out.println("线程状态:" + thread.getState()); // 输出:NEW

二,RUNNABLE(可运行状态)

线程正在Java虚拟机中执行或准备执行,等待系统资源(如CPU时间片)。

RUNNABLE状态实际上包含了两种子状态:
- Ready:线程已经准备好运行,正在等待CPU时间片
- Running:线程正在CPU上执行

需要注意的是,处于RUNNABLE状态的线程不一定正在执行,可能只是在等待CPU调度。

Thread thread = new Thread(() -> {
System.out.println("线程状态:" + Thread.currentThread().getState()); // 输出:RUNNABLE
});
thread.start();

三,BLOCKED(阻塞状态)

线程被阻塞,正在等待获取一个监视器锁(monitor lock)。

当线程试图进入一个被其他线程持有的同步代码块或方法时,就会进入BLOCKED状态。一旦锁被释放,等待的线程就有机会获取锁并继续执行。
public class BlockedExample {
private static final Object lock = new Object();

public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
synchronized (lock) {
try {
Thread.sleep(5000); // 持有锁5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

Thread thread2 = new Thread(() -> {
synchronized (lock) {
System.out.println("thread2获取到锁");
}
});

thread1.start();
try { Thread.sleep(100); } catch (InterruptedException e) {}
thread2.start();

try { Thread.sleep(100); } catch (InterruptedException e) {}
System.out.println("thread2状态:" + thread2.getState()); // 输出:BLOCKED
}
}

四,WAITING(无限期等待状态)

线程无限期地等待另一个线程执行特定操作。

进入WAITING状态的方法:
- `Object.wait()` - 不带超时时间
- `Thread.join()` - 不带超时时间
- `LockSupport.park()`

退出WAITING状态的条件:
- 其他线程调用对应对象的`notify()`或`notifyAll()`
- 其他线程中断当前线程
- 等待的线程执行完成(针对join情况)

public class WaitingExample {
public static void main(String[] args) throws InterruptedException {
Object lock = new Object();

Thread waitingThread = new Thread(() -> {
synchronized (lock) {
try {
lock.wait(); // 进入WAITING状态
System.out.println("被唤醒,继续执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

waitingThread.start();
Thread.sleep(100);
System.out.println("等待线程状态:" + waitingThread.getState()); // 输出:WAITING

synchronized (lock) {
lock.notify(); // 唤醒等待线程
}
}
}

五,TIMED_WAITING(限期等待状态)

线程在指定的时间范围内等待。

进入TIMED_WAITING状态的方法:
- `Thread.sleep(long millis)`
- `Object.wait(long timeout)`
- `Thread.join(long millis)`
- `LockSupport.parkNanos(long nanos)`
- `LockSupport.parkUntil(long deadline)`

public class TimedWaitingExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
try {
Thread.sleep(5000); // 睡眠5秒,进入TIMED_WAITING
} catch (InterruptedException e) {
e.printStackTrace();
}
});

thread.start();
Thread.sleep(100);
System.out.println("线程状态:" + thread.getState()); // 输出:TIMED_WAITING
}
}

六,TERMINATED(终止状态)

线程已经执行完毕或异常结束。

线程执行完`run()`方法或者因为未捕获的异常而退出时,就会进入TERMINATED状态。一旦进入此状态,线程就不能再次启动。

public class TerminatedExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
System.out.println("线程执行完成");
});

thread.start();
thread.join(); // 等待线程执行完成
System.out.println("线程状态:" + thread.getState()); // 输出:TERMINATED
}
}

七,线程状态转换图

http://www.jsqmd.com/news/810783/

相关文章:

  • 技术人如何识别自己的“职场天花板”?五个信号别忽视
  • CAD--solidworks
  • 为什么你的NotebookLM API调用成功率仅62%?——基于172万次生产请求日志的错误码分布分析与重试策略优化
  • 从Box到Buffer:MP4封装格式的底层解析与高效播放优化
  • 如何为Google OR-Tools开源运筹学工具贡献代码:完整指南
  • 露安适纸尿裤推荐吗:露安适安敏微气候系列强烈推荐 - 19120507004
  • 为OpenClaw智能体配置Taotoken作为后端模型提供方
  • DP做题笔记
  • 保姆级教程:用阿里云盘资源在Windows上搞定Katago和Sabaki的联调(含常见错误排查)
  • 北京包包回收哪家靠谱?2026 实测指南,避开套路快速变现 - 奢侈品回收测评
  • 2026年5月贵州铝单板厂家最新推荐:铝单板、铝幕墙单板、铝合金单板优选指南 - 海棠依旧大
  • 终极免费方案:3步解锁Cursor AI全部Pro功能,告别试用限制
  • 从Edge插件到原生EXE:ChatGPT Windows客户端演进史(2023.03–2024.06),含OpenAI内部路线图泄露片段与PWA淘汰时间表
  • 露安适纸尿裤好用吗? - 13724980961
  • GitHub Services多语言支持:如何为不同服务提供国际化接口
  • BotFramework-Emulator 与 Teams 集成:企业级聊天机器人测试解决方案
  • 天地图服务不稳定?超图iDesktopX加载WMTS服务的保姆级避坑指南(含DPI=96参数详解)
  • Redis内存管理终极指南:jemalloc vs dlmalloc性能深度对比
  • 露安适怎么样:露安适安敏微气候系列实力出众 - 17322238651
  • BaiduNetdiskPlugin-macOS:高效解锁百度网盘下载速度限制的智能方案
  • 北京钻石回收避坑攻略:正规渠道怎么选、价格怎么估 - 奢侈品回收测评
  • 3D卷积神经网络实现音视频协同识别:lip-reading-deeplearning多模态融合技术完整指南
  • React组件自动化发布终极指南:downshift版本管理最佳实践解析
  • 2026年4月成都最顶火的拍照出片的川渝火锅约会地点推荐,火锅/特色美食/成都火锅/火锅店,川渝火锅团建地点有哪些 - 品牌推荐师
  • Discord4J存储系统架构解析:实现高效内存管理和数据持久化
  • lip-reading-deeplearning部署指南:生产环境配置与性能调优
  • 大厂技术骨干回流中小厂:降维打击还是水土不服?
  • StudioOne 6保姆级安装避坑指南:从防火墙设置到VST音源加载,一次搞定
  • 2026年济南黄金回收怎么选?避坑/商家排行 - 天天生活分享日志
  • 2026 北京钻石回收行情解析,新手也能轻松卖对价、选对渠道 - 奢侈品回收测评