当前位置:首页 > Java

Java线程如何通讯

2026-02-05 02:20:41Java

Java线程通讯方法

Java线程通讯主要通过共享内存和消息传递实现,以下是几种常见方式:

共享变量

使用synchronized关键字保护共享变量,结合wait()notify()机制:

class SharedObject {
    private boolean flag = false;

    public synchronized void waitForFlag() throws InterruptedException {
        while(!flag) {
            wait();
        }
    }

    public synchronized void setFlag() {
        flag = true;
        notifyAll();
    }
}

BlockingQueue

利用线程安全的阻塞队列实现生产者-消费者模式:

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

// 生产者线程
queue.put("message");

// 消费者线程
String message = queue.take();

CountDownLatch

适用于一次性线程同步场景:

CountDownLatch latch = new CountDownLatch(3);

// 工作线程
latch.countDown();

// 主线程
latch.await();

CyclicBarrier

可重复使用的线程屏障:

CyclicBarrier barrier = new CyclicBarrier(3, () -> 
    System.out.println("All threads reached barrier"));

// 工作线程
barrier.await();

Exchanger

两个线程间交换数据:

Exchanger<String> exchanger = new Exchanger<>();

// 线程A
String dataA = exchanger.exchange("Data from A");

// 线程B
String dataB = exchanger.exchange("Data from B");

Semaphore

控制资源访问的并发数:

Semaphore semaphore = new Semaphore(5);

// 线程获取许可
semaphore.acquire();
try {
    // 访问共享资源
} finally {
    semaphore.release();
}

Future和Callable

获取线程执行结果:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> "Result");

String result = future.get();

PipedStream

线程间通过管道传输数据:

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream(in);

// 写线程
out.write("data".getBytes());

// 读线程
int data = in.read();

选择通讯方式时应考虑具体场景,对于简单同步需求可使用synchronized,复杂场景建议使用java.util.concurrent包中的高级工具类。

Java线程如何通讯

标签: 线程通讯
分享给朋友:

相关文章

vue实现串口通讯

vue实现串口通讯

Vue 实现串口通信的方法 Vue 本身不直接支持串口通信,但可以通过 Web Serial API 或第三方库实现。以下是几种常见方法: 使用 Web Serial API(浏览器环境) Web…

react两个页面之间如何通讯

react两个页面之间如何通讯

跨页面通信方法 使用URL参数传递数据 在React中可以通过路由的URL参数或查询字符串传递数据。使用react-router-dom的useNavigate和useLocation钩子实现。…

php实现线程

php实现线程

在PHP中实现多线程功能需要借助扩展或第三方库,因为PHP本身是单线程设计的语言。以下是几种常见的方法: 使用pthreads扩展(PHP 7以下版本) pthreads是一个PHP扩展,允许在PH…

php线程实现

php线程实现

在PHP中实现多线程可以通过多种方式,以下是常见的方法和示例: 使用pthreads扩展 pthreads是PHP的一个多线程扩展,适用于PHP 7.2及以上版本(Windows需ZTS版本)。…

js线程实现

js线程实现

JavaScript 线程实现方法 JavaScript 是单线程语言,但可以通过以下方式模拟多线程或实现并行处理: Web Workers Web Workers 允许在后台线程中运行脚本,不会影…

js实现线程

js实现线程

JavaScript 是单线程语言,但可以通过以下方法模拟多线程或实现并发操作: Web Worker Web Worker 允许在后台运行脚本,与主线程并行执行。创建一个新的 Worker 线程…