外观
一句话答案
Java 线程通信方式:volatile/synchronized(共享内存)、wait/notify、Lock/Condition、BlockingQueue、CompletableFuture。
核心要点
主要通信方式:
- volatile 变量:一个线程写,另一个线程读(可见性)
- synchronized + wait/notify:经典的等待-通知机制
- Lock + Condition:更灵活,支持多个等待队列
- BlockingQueue:生产者-消费者模式(推荐)
- CountDownLatch:一组线程等待另一组完成
- CyclicBarrier:一组线程互相等待到齐
- Semaphore:控制并发访问资源的线程数
- CompletableFuture:异步编排,线程间传递结果
常见场景选择:
| 场景 | 推荐方式 |
|---|---|
| 生产者-消费者 | BlockingQueue |
| 多线程协调 | CountDownLatch / CyclicBarrier |
| 异步结果 | CompletableFuture |
| 简单标志位 | volatile |
追问与易错
追问方向:
- 生产者消费者最推荐用什么?
- wait/notify 有什么缺陷?
- CompletableFuture 和 Future 的区别?
易错点:
- ❌ 用共享变量轮询代替 wait/notify——浪费 CPU
- ❌ volatile 就能实现通信——只适合简单标志位
💡 记忆锚点
线程通信从原始到高级:volatile 是贴公告栏(只能看不能交互),wait/notify 是对讲机(一对一喊话),BlockingQueue 是传送带(生产者消费者自动阻塞),CompletableFuture 是快递柜(异步存取结果)。简单标志用公告栏,生产消费用传送带,异步编排用快递柜。