![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=1738864784-WyQR2VLemne5yncIqmneU3XMeUr3R0oC-0-564e42dd289c6ffaaad9ac6c73c00850)
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=1738864784-qFmqQ6NdZVdCstB0WiBXUuFgaTZ7SnJw-0-3a974f4788efb3d5f59fabe219d58ec2)
图1-30 成功交换数据