java 如何实现线程间的通讯
线程间通信的常见方法
Java中线程间通信主要通过共享内存和消息传递实现,以下是几种常用方法:
共享对象与同步
使用synchronized关键字或Lock保护共享资源,结合wait(), notify(), notifyAll()实现协调:
synchronized(lock) {
while(!condition) {
lock.wait();
}
// 处理共享数据
lock.notifyAll();
}
BlockingQueue 线程安全队列自动处理阻塞:
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
// 生产者
queue.put("data");
// 消费者
String data = queue.take();
CountDownLatch/CyclicBarrier 同步辅助类控制线程执行顺序:

CountDownLatch latch = new CountDownLatch(3);
// 线程完成时调用
latch.countDown();
// 主线程等待
latch.await();
Exchanger 两线程间交换数据:
Exchanger<String> exchanger = new Exchanger<>();
// 线程A
String dataA = exchanger.exchange("DataA");
// 线程B
String dataB = exchanger.exchange("DataB");
PipedStream 管道流通信:

PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream(pis);
// 线程A写pos
// 线程B读pis
volatile变量 轻量级状态标记:
volatile boolean flag = false;
Atomic类 无锁原子操作:
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
选择方法时需考虑:
- 数据量大小
- 实时性要求
- 线程数量
- 是否需要持久化
对于复杂场景,可结合多种方式实现高效通信。






