java如何通信线程
线程间通信方法
Java中线程间通信主要通过共享内存和消息传递两种方式实现。以下是常见的线程通信方法:
共享变量
使用volatile关键字修饰共享变量,保证可见性。一个线程修改后,其他线程能立即看到最新值。
private volatile boolean flag = false;
wait/notify机制
通过Object类的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 允许线程等待直到计数减到零。

CountDownLatch latch = new CountDownLatch(2);
// 线程完成时调用
latch.countDown();
// 主线程等待
latch.await();
CyclicBarrier 让一组线程互相等待,到达屏障点后再继续执行。
CyclicBarrier barrier = new CyclicBarrier(3);
// 线程中调用
barrier.await();
Semaphore 控制同时访问特定资源的线程数量。
Semaphore semaphore = new Semaphore(3);
semaphore.acquire();
// 访问资源
semaphore.release();
Exchanger 两个线程在屏障点交换数据。
Exchanger<String> exchanger = new Exchanger<>();
// 线程1
String data1 = exchanger.exchange("data1");
// 线程2
String data2 = exchanger.exchange("data2");
选择依据
- 简单状态通知:
wait/notify - 生产者-消费者:
BlockingQueue - 多线程等待:
CountDownLatch/CyclicBarrier - 资源控制:
Semaphore - 线程间数据交换:
Exchanger






