![Java并发编程:核心方法与框架](https://wfqqreader-1252317822.image.myqcloud.com/cover/235/822235/b_822235.jpg)
上QQ阅读APP看书,第一时间看更新
![](https://epubservercos.yuewen.com/D3D8F4/4410924203007901/epubprivate/OEBPS/Images/icon1.png?sign=1738855303-tRlU1xcALjpVXFKeNlqBPnkwf7LeuCDm-0-765f5f2a57be36d2ebca286667a8a1d5)
1.2.2 方法exchange()传递数据
创建测试用的项目Exchanger_2,创建ThreadA.java类代码如下:
package extthread; import java.util.concurrent.Exchanger; public class ThreadA extends Thread { private Exchanger<String> exchanger; public ThreadA(Exchanger<String> exchanger) { super(); this.exchanger = exchanger; } @Override public void run() { try { System.out.println("在线程A中得到线程B的值=" + exchanger.exchange("中国人A")); } catch (InterruptedException e) { e.printStackTrace(); } } }
创建ThreadB.java类代码如下:
package extthread; import java.util.concurrent.Exchanger; public class ThreadB extends Thread { private Exchanger<String> exchanger; public ThreadB(Exchanger<String> exchanger) { super(); this.exchanger = exchanger; } @Override public void run() { try { System.out.println("在线程B中得到线程A的值=" + exchanger.exchange("中国人B")); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行类Run.java代码如下:
package test.run; import java.util.concurrent.Exchanger; import extthread.ThreadA; import extthread.ThreadB; public class Run { public static void main(String[] args) { Exchanger<String> exchanger = new Exchanger<String>(); ThreadA a = new ThreadA(exchanger); ThreadB b = new ThreadB(exchanger); a.start(); b.start(); } }
程序运行后的效果如图1-30所示。
![](https://epubservercos.yuewen.com/D3D8F4/4410924203007901/epubprivate/OEBPS/Images/figure_0046_0001.jpg?sign=1738855303-UlElldZ9of5oadKoect4DNthC0GLg5eV-0-88fc49c961baf3f540121e3fff41df76)
图1-30 成功交换数据