1.在A线程和B线程中分别使用使用exchanger(value)方法,A线程中的 exchanger(aValue)方法的返回值返回的是B线程中exchanger(bValue)进去的值bValue,也就是说在A线程调用exchanger(aValue)的返回值是bValue,B线程则反之。
2.代码如下
package cn.shiyujun.thread;
import java.util.concurrent.Exchanger;
public class ExchangerDemo {
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("等待对比结果。。。");
String value = exch.exchange(res);
System.out.println("a线程中的比对结果为:"+value.equals(res));
} 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 = "12345";
try {
//获取的是a方法中res的值
String value = exch.exchange(res);
System.out.println("开始进行比对。。。");
System.out.println("b线程中的比对结果为:"+value.equals(res));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ExchangerDemo demo = new ExchangerDemo();
Exchanger<String> exch = new Exchanger<>();
new Thread(new Runnable() {
@Override
public void run() {
demo.a(exch);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
demo.b(exch);
}
}).start();
}
}