JAVA的线程的周期及调度

JAVA线程的生命周期

Java线程的生命周期包含以下几个状态,通过Thread.State枚举类定义:

  • NEW :线程被创建但尚未启动(未调用start()方法)。
  • RUNNABLE:线程正在JVM中执行或等待操作系统资源(如CPU时间片)。
  • BLOCKED :线程被阻塞,等待获取监视器锁(如synchronized块)。
  • WAITING :线程无限期等待,直到其他线程显式唤醒(通过Object.wait()或Thread.join())。
  • TIMED_WAITING :线程有限期等待(通过Thread.sleep()、带超时的wait()或join())。
  • TERMINATED:线程执行完毕或异常退出。

线程状态转换示例代码

复制代码
Thread thread = new Thread(() -> {
    try {
        Thread.sleep(1000); // TIMED_WAITING
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});
System.out.println(thread.getState()); // NEW
thread.start();
System.out.println(thread.getState()); // RUNNABLE

JAVA线程调度机制

Java线程调度依赖于操作系统的原生线程模型,由JVM和操作系统共同管理:

  • 抢占式调度:线程优先级(1~10)仅作为提示,不保证执行顺序。高优先级线程更可能获得CPU时间片,但依赖OS实现。
  • 时间片轮转:每个线程分配固定时间片,超时后切换至其他线程。
  • yield():提示当前线程让出CPU,但实际效果不确定。
  • sleep():强制线程暂停指定时间,不释放锁。
  • wait()/notify():基于对象监视器的线程协作机制,需在同步块中使用。

优先级设置示例

复制代码
Thread highPriorityThread = new Thread(() -> System.out.println("High Priority"));
highPriorityThread.setPriority(Thread.MAX_PRIORITY); // 优先级10
highPriorityThread.start();

注意事项

  • 避免依赖线程优先级实现逻辑,不同操作系统表现可能不一致。
  • BLOCKED和WAITING状态需区分:前者因锁竞争,后者因主动调用等待方法。
  • 使用Thread.join()可实现线程顺序执行,但会阻塞调用线程。

通过合理管理线程状态及调度策略,可以优化多线程程序的性能和可靠性。

相关推荐
Joy T5 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383008 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·8 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真8 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes8 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停9 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金11 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟11 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck11 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长12 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管