【4、JUC 中的 Exchange 交换器以及代码案例】

66 阅读1分钟

Exchange(交换器)是Java Util Concurrent(JUC)中提供的一种同步工具,它允许两个线程之间交换数据,从而协调它们的操作。Exchange在Java SE 6中被引入,它是一个用于高级并发场景的工具,可以处理两个线程之间的数据交换,通常用于一些生产者-消费者模式的应用场景中。

以下是一个简单的Java代码演示了如何使用JUC中的Exchange交换器进行数据交换:

package com.lfsun.main.point.demojuc.countdownlatchandcyclicbarrier;

import java.util.concurrent.Exchanger;

public class ExchangeDemo {

    public static void main(String[] args) {
        Exchanger<String> exchanger = new Exchanger<>();

        new Thread(() -> {
            try {
                String data1 = "hello";
                System.out.println("Thread A sends data: " + data1);
                String data2 = exchanger.exchange(data1);
                System.out.println("Thread A receives data: " + data2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                String data1 = "lfsun666";
                System.out.println("Thread B sends data: " + data1);
                String data2 = exchanger.exchange(data1);
                System.out.println("Thread B receives data: " + data2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}


结果:

Thread B sends data: lfsun666
Thread A sends data: hello
Thread A receives data: lfsun666
Thread B receives data: hello

在上面的代码中,我们创建了一个Exchanger对象,并创建了两个线程来模拟数据的交换。线程A首先发送了一个字符串"hello",然后调用exchange()方法等待线程B发送数据。线程B发送了一个字符串"world",并调用exchange()方法等待线程A发送数据。当两个线程都调用exchange()方法后,它们会交换数据,线程A收到了线程B发送的"world"字符串,线程B收到了线程A发送的"hello"字符串。

可以看到,Exchange可以很方便地实现两个线程之间的数据交换,提高了程序的并发性和灵活性。