Exchanger是一个用于线程间协作的工具类,用于线程间的数据交换。它提供一个同步点,在这个同步点,两个线程通过exchange方法交换数据。先到达同步点的线程会等待后到达的线程。
应用举例:
package piped;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExchangerTest {
private static final Exchanger<String> exch = new Exchanger<String>();
private static ExecutorService threadPool = Executors.newFixedThreadPool(2);
public static void main(String[] args) {
threadPool.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String A = "银行流水A" ;
try {
String B = exch.exchange(A);
System.out.println(Thread.currentThread().getName() + ": A和B是否相等:" + A.equals(B) + " , A : " + A
+ " , B : " + B);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
threadPool.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String B = "银行流水B";
try {
String A = exch.exchange(B);
System.out.println(Thread.currentThread().getName() + ": A和B是否相等:" + A.equals(B) + " , A : " + A
+ " , B : " + B);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
threadPool.shutdown();
}
}
输出为:
pool-1-thread-1: A和B是否相等:false , A : 银行流水A , B : 银行流水B
pool-1-thread-2: A和B是否相等:false , A : 银行流水A , B : 银行流水B