Exchanger 交换器,用于两个线程之间交换数据。
线程1调用exchange()方法,然后进行线程阻塞,等待线程2调用exchange()方法交换数据,线程2调用exchange()方法后,两个线程继续执行。
例如:
public class ExchangerTest {
public void a (Exchanger<String> exch) {
System.out.println("a 方法执行...");
try {
System.out.println("a 线程正在抓取数据...");
Thread.sleep(2000);
System.out.println("a 线程抓取到数据...");
} catch (InterruptedException e) {
e.printStackTrace();
}
String res = "12345";
try {
System.out.println("a 等待对比结果... 抓取数据为:" + res);
String value = exch.exchange(res);
System.out.println("a获取b交换过来的数据:" + value);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void b (Exchanger<String> exch) {
System.out.println("b 方法开始执行...");
try {
System.out.println("b 方法开始抓取数据...");
Thread.sleep(4000);
System.out.println("b 方法抓取数据结束...");
} catch (InterruptedException e) {
e.printStackTrace();
}
String res = "1234567";
try {
String value = exch.exchange(res);
System.out.println("开始进行比对...");
System.out.println("b获取a交换过来的数据:" + value);
System.out.println("比对结果为:" + value.equals(res));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
final ExchangerTest d = new ExchangerTest();
final Exchanger<String> exch = new Exchanger<String>();
new Thread(()->d.a(exch)).start();
new Thread(()->d.b(exch)).start();
}
}