关于进程和线程的关系


这本笔记非常详尽地记录了多线程的核心概念,特别是从进程与线程的区别 深入到线程安全问题异常机制。我看你笔记里重点标注了"进程是资源分配的基本单位,线程是调度执行的基本单位",这是理解多线程的基石。

结合你的笔记内容,我帮你把核心知识点梳理并补充完整,形成一个更系统的体系,方便你复习:

一、 为什么需要多线程?(进程 vs 线程)

笔记中提到"多进程是并发编程解决方案",但"开销大",所以引入了线程。

  • 进程 :系统进行资源分配和调度的基本单位。创建/销毁进程开销大(需要切换内存空间)。
  • 线程 :进程内部的执行单元,是CPU调度和执行的基本单位。
  • 关系 :一个进程包含一个或多个线程。线程共享进程的资源(如内存、文件描述符),但有自己独立的栈空间和寄存器状态。
  • 优势:相比于多进程,线程的创建/销毁和切换开销小(轻量级),且通信更方便(直接读写共享内存)。

二、 多线程编程的核心难点(笔记重点)

你笔记右页的第一点提到了最核心的痛点,这里展开一下:

  1. 线程安全问题

    • 原因:多个线程同时操作同一个数据(共享变量),导致冲突。
    • 后果:出现数据不一致(Bug)。
    • 解决思路 :笔记中提到的 synchronized(加锁)和 volatile(保证可见性)。
      • synchronized:保证同一时刻只有一个线程能执行某段代码,解决原子性问题。
      • volatile:强制线程每次读取变量都从主内存读,解决可见性问题。
  2. 异常处理

    • 机制:单个线程如果发生了未捕获的异常,默认会导致整个进程终止。
    • 解决 :在 run()方法里使用 try-catch捕获异常。Java 后来也引入了 UncaughtExceptionHandler接口来处理这种情况。

三、 笔记中隐含的一个小问题

你在左页中间画了一个层级图,写到了"线程 -> 操作系统"。

  • 补充 :在 Java 中,我们写的 Thread类是 Java 层面的线程对象。当它调用 start()方法时,底层会通过 JNI 调用操作系统的 API(如 Linux 的 pthread_create)去创建一个真正的内核级线程。所以 Java 的线程本质上是对操作系统线程的一层封装。

四、 进程调度与线程状态

笔记右页提到"进程调度:只有一个线程的进程"。

  • 补充 :实际上,单核 CPU 下,即使是多进程,也是通过时间片轮转来调度的。而线程是 CPU 调度的最小单位
  • 线程状态(Java 中):新建 (New) -> 就绪 (Runnable) -> 运行 (Running) -> 阻塞 (Blocked/Waiting) -> 死亡 (Terminated)。
相关推荐
自己的九又四分之三站台3 小时前
C# 接入 RasterLite2:从原生 DLL 加载到 Coverage、Section、Tile 验证
开发语言·c#·地理信息
飞翔的火箭弹3 小时前
企业网络资产管理用什么系统工具
开发语言·网络·php
evans在进步3 小时前
Spring Boot 核心机制详解:自动装配、事件监听、异步任务与请求映射
java·spring boot·后端
码云骑士3 小时前
116-Python调用GPT-4V分析图片-Base64编码-多图-JSON结构化输出
开发语言·python·json
Zane19943 小时前
HashSet、TreeSet、LinkedHashSet:底层都是"套壳"
java·后端
88号技师3 小时前
2026年SCI-分数牛顿衍生优化算法Fractional Newton-derived optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
承渊政道3 小时前
【Python编程—从入门到实践】(Python操作列表深度教程:循环、切片、元组与代码风格)
开发语言·python·pycharm·列表·元组·切片
相顾若初见3 小时前
RuoYi后端jar镜像制作
java·jar
布值倒区什么name3 小时前
Pycharm2026找不到编译器 点击运行运行不了
开发语言·python·pycharm
MacroZheng3 小时前
程序员看文档神器,装上它,看Spring官方文档就一目了然了!
java·人工智能·后端