java 并发编程

Java 并发编程是进阶路上最难、也是含金量最高的一关。

下面我用"面试 + 实战 + 源码"三层结构,帮你把并发体系一次捋清楚。

一、并发的三大核心问题(先记住)

问题 说明 后果

可见性 一个线程改了变量,另一个线程看不见 读到旧值

原子性 操作被打断 数据错乱

有序性 指令重排序 逻辑异常

✅ JMM(Java 内存模型)就是为了解决这三个问题

二、线程基础(必须扎实)

1️⃣ 创建线程的 3 种方式

// 1. Thread

new Thread(() -> {}).start();

// 2. Runnable

new Thread(new MyRunnable()).start();

// 3. Callable + Future

FutureTask task = new FutureTask<>(() -> "ok");

new Thread(task).start();

✅ 推荐:Runnable / Callable(解耦)

2️⃣ 线程状态(面试必考)

NEW → RUNNABLE ↔ BLOCKED → WAITING → TIMED_WAITING → TERMINATED

状态 触发

BLOCKED synchronized

WAITING wait() / join()

TIMED_WAITING sleep(time)

三、锁机制(重中之重)

1️⃣ synchronized(JDK 内置)

✅ 特性:

• 可重入

• 非公平

• JVM 层面实现

✅ 锁升级(JDK 8+):

无锁 → 偏向锁 → 轻量级锁 → 重量级锁

📌 面试高频

synchronized 能保证可见性吗?

✅ 能(解锁前刷新主内存)

2️⃣ Lock 接口(JUC)

锁 特点

ReentrantLock 可重入、可中断

ReadWriteLock 读写分离

StampedLock 乐观读(更高性能)

ReentrantLock lock = new ReentrantLock();

lock.lock();

try {

// do something

} finally {

lock.unlock();

}

✅ Lock vs synchronized

• Lock:灵活、可中断、公平锁

• synchronized:简单、JVM 优化好

四、线程池(并发的灵魂)

1️⃣ ThreadPoolExecutor 核心参数

new ThreadPoolExecutor(

corePoolSize,

maximumPoolSize,

keepAliveTime,

TimeUnit.SECONDS,

new LinkedBlockingQueue<>(100),

new ThreadPoolExecutor.AbortPolicy()

);

参数 作用

corePoolSize 常驻线程

maximumPoolSize 最大线程

workQueue 任务队列

RejectedExecutionHandler 拒绝策略

2️⃣ 执行流程(面试必背)

提交任务

↓

核心线程是否满?

↓

队列是否满?

↓

最大线程是否满?

↓

拒绝策略

✅ 拒绝策略

• AbortPolicy(抛异常)

• CallerRunsPolicy(调用者线程执行)

• DiscardPolicy(直接丢弃)

五、并发工具类(JUC 精华)

工具 用途

CountDownLatch 等待多线程完成

CyclicBarrier 线程相互等待

Semaphore 限流

Exchanger 线程间交换数据

✅ 高频场景

• 压测

• 批量任务汇总

• 限流控制

六、并发容器(替代 synchronized 集合)

容器 特点

ConcurrentHashMap 高并发 KV

CopyOnWriteArrayList 读多写少

BlockingQueue 生产者消费者

ConcurrentLinkedQueue 高性能无锁队列

✅ CopyOnWrite 缺点

• 写成本高

• 数据可能滞后

七、并发设计模式(拉开差距)

✅ Worker Thread

✅ Producer-Consumer

✅ Thread Local

✅ Future / Promise

八、常见并发陷阱(面试连环问)

❌ volatile 不能保证原子性

❌ i++ 不是线程安全的

❌ 线程池不要使用 Executors 创建

❌ ThreadLocal 用完要 remove()

九、并发学习路线(强烈推荐)

✅ 第一阶段:会用

• Thread / Runnable

• synchronized

• volatile

• ThreadPoolExecutor

✅ 第二阶段:懂原理

• JMM

• happens-before

• 锁升级

• AQS(AbstractQueuedSynchronizer)

✅ 第三阶段:能设计

• 高并发限流

• 异步编排

• 线程池调优

十、下一步我可以帮你做什么?

相关推荐
forest_0920 小时前
用Python复刻ClaudeDuet:主动式Agent四件套,定时晨报、后台巡检、危险动作审批(附完整可运行代码)
人工智能·python·架构·prompt·agi
liangbo720 小时前
03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用
java
小小张说故事20 小时前
Python 的函数调用到底贵在哪?拆开一次 call:51 纳秒栈帧与 *args 的 40 纳秒罚单
python
2401_8858850421 小时前
国际语音C#接口怎么写?.NET环境下实现国际语音验证码批量下发
开发语言·c#·.net
Percep_gan21 小时前
调用天翼云的对象存储ZOS,很详细
java·1024程序员节
若亦_21 小时前
数据结构>>优先级队列(堆)
java·数据结构
程序猿乐锅21 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
Wang's Blog21 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友
lzqrzpt21 小时前
太阳能控制器选型要点:电路工艺与工程适配技术解析
python·1024程序员节
denlaku21 小时前
JDK 23 新特性详解
java