温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java多线程如何通信

发布时间:2026-10-03 11:55:50 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,多线程通信通常指多个线程之间协调工作、交换数据或控制执行顺序。常见方式如下(从常用到高级):


一、共享变量 + volatile(最简单)

适用于状态标志通知

class Task {
    private volatile boolean running = true;

    public void stop() {
        running = false;
    }

    public void run() {
        while (running) {
            // 执行业务
        }
    }
}

✅ 轻量
❌ 不适合复杂协调


二、wait() / notify() / notifyAll()(经典方式)

基于 synchronized

class Demo {
    private final Object lock = new Object();
    private boolean ready = false;

    public void producer() throws InterruptedException {
        synchronized (lock) {
            ready = true;
            lock.notify();
        }
    }

    public void consumer() throws InterruptedException {
        synchronized (lock) {
            while (!ready) {
                lock.wait();
            }
            System.out.println("消费");
        }
    }
}

⚠ 注意:

  • 必须在 synchronized 内调用
  • 用 while 防止虚假唤醒

三、Lock + Condition(更灵活)

java.util.concurrent.locks

Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();

// 等待
lock.lock();
try {
    condition.await();
} finally {
    lock.unlock();
}

// 唤醒
lock.lock();
try {
    condition.signal();
} finally {
    lock.unlock();
}

✅ 可多条件
✅ 更可控


四、BlockingQueue(最推荐,生产消费模型)

java.util.concurrent

BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();

// 生产者
queue.put(1);

// 消费者
Integer val = queue.take();

✅ 线程安全
✅ 天然阻塞
✅ 不需要手动加锁


五、CountDownLatch(等待多线程完成)

CountDownLatch latch = new CountDownLatch(3);

// 子线程
latch.countDown();

// 主线程
latch.await();

六、CyclicBarrier(线程相互等待)

CyclicBarrier barrier = new CyclicBarrier(3);
barrier.await();

七、Exchanger(线程间交换数据)

Exchanger<String> exchanger = new Exchanger<>();
String data = exchanger.exchange("A");

八、Future / CompletableFuture(线程结果通信)

Future<Integer> f = executor.submit(() -> 1 + 1);
Integer r = f.get();
CompletableFuture.supplyAsync(() -> 1)
    .thenAccept(System.out::println);

九、并发集合(共享数据通信)

  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • ConcurrentLinkedQueue

十、选择建议

场景 推荐方式
简单状态通知 volatile
生产者消费者 BlockingQueue
精确唤醒 Lock + Condition
等待完成 CountDownLatch
结果返回 Future
高并发共享 并发集合

如果你有具体业务场景(如:生产者消费者、任务协调、结果汇总),我可以给你完整示例代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手