交换器 Exchanger
Exchanger 是 Java 并发包中的一个同步工具类,位于 java.util.concurrent 包下。它提供了一个用于在两个线程之间交换数据的同步点。Exchanger 用于当两个线程希望在某个同步点交换数据时,可以使用它来实现数据交换。
Exchanger 的工作机制如下:
- 两个线程通过调用 exchange 方法来到达同步点。
- 第一个线程调用 exchange 方法时,会等待第二个线程也调用 exchange 方法。
- 当两个线程都调用 exchange 方法时,它们会交换数据,即第一个线程将自己的数据传递给第二个线程,同时接收第二个线程的数据。
下面是一个简单的示例,展示了如何使用 Exchanger 在两个线程之间交换数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import java.util.concurrent.Exchanger;
public class ExchangerExample { public static void main(String[] args) { Exchanger<String> exchanger = new Exchanger<>();
// 线程A new Thread(() -> { try { String dataA = "Data from A"; System.out.println("Thread A is exchanging data: " + dataA); String receivedData = exchanger.exchange(dataA); System.out.println("Thread A received: " + receivedData); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start();
// 线程B new Thread(() -> { try { String dataB = "Data from B"; System.out.println("Thread B is exchanging data: " + dataB); String receivedData = exchanger.exchange(dataB); System.out.println("Thread B received: " + receivedData); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); } }
|
Exchanger 通常用于一些需要线程之间进行数据交换的场景,比如生产者-消费者模型中,当生产者和消费者希望交换缓冲区时,可以使用 Exchanger 来实现。