当前位置:首页 > Java

如何实现java线程间的通信

2026-03-17 20:05:23Java

使用共享变量

通过共享的变量或对象实现线程间通信,需使用 volatile 关键字或同步机制(如 synchronized)保证可见性。例如:

class SharedObject {
    volatile boolean flag = false;
}

线程通过修改和读取 flag 实现简单通信。

使用 wait/notify 机制

通过 Object 类的 wait()notify()notifyAll() 方法实现线程协作。需在同步块中调用:

synchronized (lock) {
    while (!condition) {
        lock.wait(); // 释放锁并等待
    }
    // 条件满足后执行任务
    lock.notifyAll(); // 唤醒其他线程
}

使用 BlockingQueue

利用 BlockingQueue(如 ArrayBlockingQueue)实现生产者-消费者模型:

如何实现java线程间的通信

BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
// 生产者线程
queue.put("data"); // 阻塞直到队列有空位
// 消费者线程
String data = queue.take(); // 阻塞直到队列有数据

使用 CountDownLatch

通过 CountDownLatch 实现线程等待其他线程完成:

CountDownLatch latch = new CountDownLatch(3);
// 工作线程
latch.countDown(); // 计数减1
// 主线程
latch.await(); // 阻塞直到计数归零

使用 CyclicBarrier

CyclicBarrier 让多个线程在屏障点同步:

CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("All threads reached"));
// 线程内调用
barrier.await(); // 阻塞直到所有线程到达

使用 Exchanger

Exchanger 实现两个线程间交换数据:

如何实现java线程间的通信

Exchanger<String> exchanger = new Exchanger<>();
// 线程A
String dataA = exchanger.exchange("Data from A");
// 线程B
String dataB = exchanger.exchange("Data from B");

使用 PipedStream

通过 PipedInputStreamPipedOutputStream 实现线程间字节流通信:

PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream(pis);
// 线程A写入
pos.write("data".getBytes());
// 线程B读取
int data = pis.read();

使用回调机制

通过接口回调实现线程间通知:

interface Callback {
    void onComplete(String result);
}
// 工作线程
callback.onComplete("Done");

使用 CompletableFuture

CompletableFuture 提供异步任务链式调用和结果传递:

CompletableFuture.supplyAsync(() -> "Hello")
    .thenApplyAsync(s -> s + " World")
    .thenAccept(System.out::println);

分享给朋友:

相关文章

vue如何实现分离

vue如何实现分离

Vue 实现组件分离的方法 Vue 可以通过多种方式实现组件分离,提升代码的可维护性和复用性。以下是几种常见的方法: 单文件组件 (SFC) Vue 的单文件组件(.vue 文件)将模板、脚本和样式…

java如何创建线程

java如何创建线程

创建线程的方法 在Java中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何实现vue

如何实现vue

安装 Vue.js 使用 npm 或 yarn 安装 Vue.js。确保已安装 Node.js 环境。 npm install vue # 或 yarn add vue 创建 Vue 实例 在 HT…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用自…