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可以很方便地实现两个线程之间的数据交换,提高了程序的并发性和灵活性。