news 2026/6/3 15:48:16

Java多线程全解笔记|从进程线程到线程池+并发集合(面试干货)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java多线程全解笔记|从进程线程到线程池+并发集合(面试干货)

Java多线程全解笔记|从进程线程到线程池+并发集合(面试干货)

前言

本文整合Java多线程核心知识点:进程&线程基础、线程5大状态、synchronized同步、wait/notify通信、线程池、Callable、Lock锁、并发安全集合,覆盖课堂重点+高频面试题,适合复习、面试复盘。

一、进程与线程基础

1.进程

操作系统中独立运行的应用程序,OS支持多进程并发:

- 微观:串行执行,轮流抢占CPU时间片;
- 宏观:并行运行,看起来同时执行。

2.线程

进程内的独立任务单元,轻量化进程,一个进程包含多条线程。

1. 主线程: main() 方法所在线程,程序入口。
2. 内存特点- 栈:线程私有,存局部变量;
- 堆:进程共享,所有线程共用存放对象。
3. 创建线程3种方式(必考)
|实现方式|写法要点|
| ---- | ---- |
|继承Thread类|子类重写 run() , new对象.start() 启动|
|实现Runnable接口|实现 run() ,对象传入Thread构造,start启动|
|实现Callable接口|带返回值、抛异常,配合线程池+Future使用|

注意: start() 才会创建线程、由JVM调用run;直接调用run只是普通方法。

二、线程6种生命周期状态

New(新建)→Ready(就绪)→Running(运行)→阻塞/等待→Terminated(终止)

1. New新建: new Thread() ,仅分配内存,未启动;
2. Ready就绪:调用 start() ,等待CPU时间片;
3. Running运行:抢到CPU时间片,执行run;时间片用完回到就绪;
4. Blocked阻塞:抢 synchronized 锁失败,等待释放锁;
5. TimedWaiting限时等待: sleep(毫秒) ,休眠固定时长,不释放锁;
6. Waiting无限等待: wait() / join() ,等待唤醒,释放锁;
7. Terminated终止:run方法执行完毕,线程消亡。

面试: sleep() 和 wait() 区别

1. sleep:Thread方法,限时休眠,不放锁、到期自动就绪;
2. wait:Object方法,无限等待,释放锁、需要notify唤醒,必须在同步代码内使用。

三、线程同步 synchronized(解决多线程数据错乱)

1.核心概念

- 临界资源:多线程共享的同一个对象;
- 原子操作:不可拆分的代码,要么全执行、要么不执行;
- 同步目的:保证原子操作不被打断,避免并发错乱。

2.两种同步写法

1. 同步代码块

java

synchronized(临界资源对象){
//原子操作代码
}


锁指定对象,只有拿到锁标记才能执行代码,没拿到进入阻塞。

2. 同步方法:方法上加 synchronized ,等价于 synchronized(this) ,锁当前实例对象。

四、线程间通信 wait & notify

Object提供的等待/通知机制,必须在同步代码块使用:

1. wait() :释放锁+CPU,进入无限等待;
2. notify() :随机唤醒1条等待线程;
3. notifyAll() :唤醒全部等待线程;

通知不会立刻释放锁,要等同步代码执行完才释放。

五、线程池(开发常用,减少频繁创建销毁线程开销)

1.核心API( java.util.concurrent 包)

1. Executor :顶层根接口;
2. ExecutorService :线程池常用接口,核心方法:- submit(Runnable) :提交无返回任务;
- submit(Callable) :提交带返回任务,返回Future接收结果;
- shutdown() :关闭线程池。
3. Executors 工具类(快速创建线程池)- newFixedThreadPool(n) :固定线程数量的线程池;
- newCachedThreadPool() :动态扩容无上限线程池。

六、Callable接口(有返回值的线程任务)

1. JDK5新增,替代Runnable, V call() 有泛型返回值、可抛异常;
2. Future.get() :阻塞获取Callable任务返回结果;
3. 分类:- 同步调用:等待方法执行完再向下走;
- 异步调用:提交任务后主线程继续执行,后续再拿结果。

七、Lock锁与读写锁(替代synchronized,灵活)

1.ReentrantLock 独占锁

java

Lock lock=new ReentrantLock();
lock.lock();//加锁
try{//业务代码
}finally{lock.unlock();//finally必释放锁,防止死锁}


2.ReentrantReadWriteLock读写锁

- 读读不互斥、读写/写读/写写全部互斥;
- 适用:读多写少场景,大幅提升并发效率。

八、并发安全集合|面试高频对比

1.普通非安全集合(多线程并发报错)

ArrayList、HashMap、HashSet :线程不安全、无同步锁、效率高。

2.老式安全集合(加全量synchronized,效率低)

Vector、Hashtable :方法全同步,性能差,逐步淘汰。

3.JUC高效并发集合( java.util.concurrent )

1. CopyOnWriteArrayList
写时复制新数组加锁、读无锁;读多写少优先用,读安全高效。和ArrayList区别:ArrayList不安全;COW写复制、线程安全、读性能接近ArrayList。
2. ConcurrentHashMap
JDK分段锁机制,细分锁粒度,分段加锁,并发性能远高于Hashtable;不允许key/value为null。
3. ConcurrentLinkedQueue:CAS无锁实现的线程安全队列。
4. BlockingQueue阻塞队列: ArrayBlockingQueue(数组定容)、LinkedBlockingQueue(链表不定容) ,生产消费模型常用。

集合整体架构图

plaintext

Collection
├─List(有序、可重复、带索引)
│ ├ArrayList、LinkedList、Vector、CopyOnWriteArrayList
├─Set(无序、不可重复)
│ ├HashSet、TreeSet、LinkedHashSet
├─Queue(FIFO队列)
│ ├LinkedList、ConcurrentLinkedQueue、BlockingQueue实现类
Map
├HashMap、Hashtable、LinkedHashMap、ConcurrentHashMap、TreeMap


九、高频面试题汇总

1. sleep和wait区别?(见上文)
2. ArrayList和Vector/CopyOnWriteArrayList区别?
3. HashMap、Hashtable、ConcurrentHashMap区别?
4. 实现多线程三种方式优缺点?
5. synchronized和Lock区别?

结尾

本篇覆盖JavaSE多线程全部考点,日常开发、期末复习、面试背记均可直接使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 15:41:36

schematic page grid 和part and symbol grid

1.schematic page grid:是指当你打开原理图.dsn设计的时候。具体含义:是指当你画原理图的时候背景点阵,以及鼠标移动和放置元件,绘制导线的基本步长2.part and symbol grid是指在old库设计的时候使用具体含义:是指当你封装库文件的…

作者头像 李华
网站建设 2026/6/3 15:39:46

广告数据优化四大黄金指标

在广告投放中,你可能每天都在盯着后台数据——曝光量、点击率、转化率……但有没有一种“数据很多,却不知道该怎么优化”的感觉?近期和几家合作客户复盘时发现,真正让广告效果产生差距的,往往不是预算多与少&#xff0…

作者头像 李华
网站建设 2026/6/3 15:38:16

C语言基础入门到进阶:变量、函数、指针与内存管理一文讲透

本文是一篇面向零基础读者的 C 语言基础入门教程,系统讲解 C 语言开发环境、编译运行、变量与数据类型、分支循环、函数、数组、字符串、指针和动态内存管理。文章以“概念 可运行代码 常见错误 完整小项目”的方式组织,适合初学者从 0 开始建立 C 语…

作者头像 李华
网站建设 2026/6/3 15:38:13

自己动手丰衣足食-自己动手修改GBA ROM游戏文件

经过一天的努力终于琢磨出怎么修改GBA的游戏文件也就是俗称的ROM文件,起因是因为偶然看到二手GBM,顿时抑制不住买了一台,可惜买得晚了,完美运行游戏又带金手指功能的烧录卡买不到了。SUPERCARD烧录卡看评论说费电,玩游…

作者头像 李华