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)

✅ 第三阶段:能设计

• 高并发限流

• 异步编排

• 线程池调优

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

相关推荐
Dxy12393102161 小时前
python缩放图片如何保证图片质量
python
罗超驿1 小时前
18.Web API 实战:元素与表单属性的获取和修改
开发语言·前端·javascript
无风听海1 小时前
JSON Web Token(JWT)完全指南
java·前端·json
ZHW_AI课题组2 小时前
腾讯云调用IP定位
人工智能·python·机器学习
被子你放开我2 小时前
CRMEB PHP多商户升级4.0太麻烦了
开发语言·php
阿里嘎多学长2 小时前
2026-06-01 GitHub 热点项目精选
开发语言·程序员·github·代码托管
zhaoshuzhaoshu2 小时前
Python文件操作详细解析带例子
python
JAVA社区2 小时前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes