Skip to content
基础

一句话答案

Java 线程通信方式:volatile/synchronized(共享内存)、wait/notify、Lock/Condition、BlockingQueue、CompletableFuture。

核心要点

主要通信方式:

  1. volatile 变量:一个线程写,另一个线程读(可见性)
  2. synchronized + wait/notify:经典的等待-通知机制
  3. Lock + Condition:更灵活,支持多个等待队列
  4. BlockingQueue:生产者-消费者模式(推荐)
  5. CountDownLatch:一组线程等待另一组完成
  6. CyclicBarrier:一组线程互相等待到齐
  7. Semaphore:控制并发访问资源的线程数
  8. CompletableFuture:异步编排,线程间传递结果

常见场景选择:

场景推荐方式
生产者-消费者BlockingQueue
多线程协调CountDownLatch / CyclicBarrier
异步结果CompletableFuture
简单标志位volatile
追问与易错

追问方向:

  • 生产者消费者最推荐用什么?
  • wait/notify 有什么缺陷?
  • CompletableFuture 和 Future 的区别?

易错点:

  • ❌ 用共享变量轮询代替 wait/notify——浪费 CPU
  • ❌ volatile 就能实现通信——只适合简单标志位

💡 记忆锚点

线程通信从原始到高级:volatile 是贴公告栏(只能看不能交互),wait/notify 是对讲机(一对一喊话),BlockingQueue 是传送带(生产者消费者自动阻塞),CompletableFuture 是快递柜(异步存取结果)。简单标志用公告栏,生产消费用传送带,异步编排用快递柜。