# Java中Exchanger的使用方法
## 概述
Exchanger是Java并發包(`java.util.concurrent`)中的一個同步工具類,主要用于**兩個線程之間交換數據**。它提供了一個同步點,當兩個線程都到達這個點時,可以互相交換持有的數據。這種機制特別適用于**生產者-消費者模式**的變體場景。
## 核心方法
```java
// 構造方法
Exchanger<V>()
// 主要API
V exchange(V x) throws InterruptedException
V exchange(V x, long timeout, TimeUnit unit)
throws InterruptedException, TimeoutException
import java.util.concurrent.Exchanger;
public class ExchangerDemo {
public static void main(String[] args) {
Exchanger<String> exchanger = new Exchanger<>();
new Thread(() -> {
try {
String data = "Thread-A的數據";
System.out.println(Thread.currentThread().getName() + " 準備交換: " + data);
String received = exchanger.exchange(data);
System.out.println(Thread.currentThread().getName() + " 收到: " + received);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "Thread-A").start();
new Thread(() -> {
try {
String data = "Thread-B的數據";
System.out.println(Thread.currentThread().getName() + " 準備交換: " + data);
String received = exchanger.exchange(data);
System.out.println(Thread.currentThread().getName() + " 收到: " + received);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "Thread-B").start();
}
}
exchange()
會阻塞try {
String result = exchanger.exchange(data, 1, TimeUnit.SECONDS);
} catch (TimeoutException e) {
System.out.println("交換數據超時");
}
Exchanger提供了一種簡潔的線程間數據交換機制,雖然使用場景相對特定,但在需要精確控制兩個線程數據傳遞時非常有效。合理使用可以簡化某些并發場景的設計,但需要注意其線程配對特性和可能的阻塞問題。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。