0

0

在Java里Thread是如何被管理的_Java线程模型核心概念解析

P粉602998670

P粉602998670

发布时间:2026-01-07 12:40:03

|

516人浏览过

|

来源于php中文网

原创

java线程基于os内核线程实现1:1映射,通过继承thread或实现runnable创建;生命周期含new、runnable等六种jvm状态;调度依赖os,优先级仅作弱提示;需显式管理资源,推荐使用java.util.concurrent工具类。

在java里thread是如何被管理的_java线程模型核心概念解析

Java 中的 Thread 并非由 Java 虚拟机直接全权调度,而是依托操作系统内核线程(Native Thread)实现,JVM 层负责封装、状态跟踪与生命周期协调。这种“用户线程 + 内核线程”一对一映射模型(称为 1:1 线程模型),是 HotSpot JVM 的默认实现方式。

线程的创建与启动机制

Java 提供两种主流创建方式,本质都是为任务分配一个可被 OS 调度的执行单元:

  • 继承 Thread 类:重写 run() 方法定义任务逻辑;调用 start() 后,JVM 会触发底层 pthread_create(Linux)或 CreateThread(Windows)创建真实内核线程,并自动回调 run()
  • 实现 Runnable 接口:将任务逻辑与线程控制解耦;传入 Thread 构造器后,start() 同样触发原生线程创建,执行时再委托给 Runnable.run()

⚠️ 注意:run() 是普通方法,直接调用不会开启新线程;只有 start() 才真正进入 JVM 线程管理流程。

线程生命周期由 JVM 状态机统一建模

JVM 定义了六种明确的 Thread.State,反映线程在 OS 调度和 Java 语义下的综合状态:

立即学习Java免费学习笔记(深入)”;

有道智云AI开放平台
有道智云AI开放平台

有道智云AI开放平台

下载
  • NEW:对象已创建,但尚未调用 start()
  • RUNNABLE:已调用 start(),处于就绪或正在 CPU 上运行(含 OS 层面的 running + ready 状态)
  • BLOCKED:等待获取 synchronized 锁(进入同步块/方法时阻塞)
  • WAITING:调用 Object.wait()Thread.join()LockSupport.park() 后无限期等待唤醒
  • TIMED_WAITING:带超时的等待,如 Thread.sleep(1000)wait(500)parkNanos()
  • TERMINATEDrun() 正常结束或因未捕获异常退出

这些状态由 JVM 在每次线程切换、锁竞争、等待操作发生时主动更新,可通过 Thread.getState() 实时观测。

线程调度依赖操作系统,Java 仅提供弱提示

JVM 不实现自己的抢占式调度器,而是将线程优先级(setPriority(1–10))映射为 OS 线程优先级(如 Linux 的 nice 值)。但:

  • 不同平台映射策略不同,行为不可移植
  • 现代 OS 通常忽略或弱化用户态优先级,尤其在公平调度策略下
  • 高优先级不能保证先执行,更不能保证不被抢占

因此,业务逻辑不应依赖优先级做正确性保障,仅可作为性能调优的辅助手段。

线程资源需显式管理,避免泄漏与争用

JVM 不自动回收仍在运行的线程。常见风险包括:

  • 未终止的后台线程(如忘记 interrupt()break 循环)导致应用无法退出
  • 共享变量未同步,引发可见性或原子性问题(如 i++ 非原子)
  • 死锁:多个线程循环等待对方持有的锁(如 synchronized 嵌套顺序不一致)
  • 线程局部存储(ThreadLocal)未清理,造成内存泄漏(尤其在线程池中)

推荐实践:优先使用 java.util.concurrent 工具类(如 ExecutorServiceAtomicIntegerReentrantLock),它们封装了底层复杂性并内置安全机制。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

261

2025.10.24

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1923

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

656

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2392

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

99

2025.12.01

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号