java中进程是资源分配单位,线程是cpu调度单位;一个jvm程序是一个进程,内含主线程及多个共享堆/方法区的线程,线程崩溃可能导致jvm退出,而进程间完全隔离。

Java 中线程和进程的本质区别,核心在于“谁管资源、谁被调度”——进程是资源分配的单位,线程是 CPU 调度的单位;它们的联系则体现在包含与依赖关系:一个 Java 程序启动时就是一个 JVM 进程,而这个进程至少包含一个主线程(main 线程),所有用户线程都运行在该进程内部。
资源视角:隔离 vs 共享
进程拥有独立的地址空间(堆、方法区、本地内存等)、文件句柄、网络连接等系统资源,彼此完全隔离。比如用 Runtime.getRuntime().exec("java -version") 启动新进程,它和当前 JVM 进程内存互不可见,通信必须走输入/输出流或 Socket。
线程不拥有独立资源,只保留执行所需最小上下文:程序计数器、虚拟机栈、本地方法栈。同一 JVM 进程内的所有线程共享堆、方法区、静态变量等——这使得线程间通信极快(直接读写共享变量),但也带来线程安全问题(如竞态、脏读)。
生命周期与稳定性
- 进程生命周期由操作系统管理:创建需分配内存、注册 PCB、加载类路径等,开销大;崩溃后一般不影响其他进程。
- 线程生命周期依附于进程:主线程结束不等于 JVM 退出(守护线程可继续),但若非守护线程全部终止,JVM 自动退出;任一线程因未捕获异常(如 NullPointerException)崩溃,整个 JVM 进程可能随之终止(尤其在无全局异常处理器时)。
调度与并发能力
操作系统调度器直接调度的是线程,不是进程。即使单核 CPU,多个线程也能通过时间片轮转实现并发效果;而多进程并发则需更重的上下文切换(涉及内存映射、页表刷新等)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Java 的并发模型建立在线程之上:Thread 类、Runnable 接口、Executor 框架、Lock 和原子类等,都是对 OS 线程的封装与增强。你调用 thread.start(),最终触发的是操作系统创建并唤醒一个原生线程(1:1 线程模型,HotSpot 默认)。
Java 层的体现方式不同
进程在 Java 中没有对应类,只能通过 Process 或 ProcessBuilder 启动外部程序,属于跨进程边界操作;线程则是语言级原生支持:Thread 类、lambda 创建、ForkJoinPool 等,都在同一个 JVM 进程内组织和协作。
简言之:写 Java 并发代码,你打交道的几乎全是线程;只有需要隔离环境(如插件沙箱、脚本引擎)、规避单点故障(如重启子任务而不影响主服务),才考虑 fork 新进程。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










