社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
用于两个线程之间交换数据
只有一个交换exchange的方法
/**
* @description 测试同步类Exchanger:用于简化两个线程之间的数据交换
* @author hy
* @date 2019-10-12
*/
public class ExchangerTest {
Exchanger<String> exchanger = new Exchanger<String>();
public static void main(String[] args) {
ExchangerTest exchangerTest = new ExchangerTest();
exchangerTest.startExchange("A","B");
}
// 启动线程开始交换数据
public void startExchange(String A,String B) {
new Thread(new AThread(A), "A").start();
new Thread(new BThread(B), "B").start();
}
// 交换数据
public String exchage(String str) {
try {
return exchanger.exchange(str);//通过exchange方法进行同步
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
// 用于交换数据的线程A
class AThread implements Runnable {
String str;
public AThread(String str) {
this.str = str;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name + ":线程交换前的值为:" + str);
str = exchage(str);//通过exchange方法进行同步
System.out.println(name + ":线程交换后的值为:" + str);
}
}
// 用于交换数据的线程B
class BThread implements Runnable {
String str;
public BThread(String str) {
this.str = str;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name + ":线程交换前的值为:" + str);
str = exchage(str);//通过exchange方法进行同步
System.out.println(name + ":线程交换后的值为:" + str);
}
}
}
结果:
1.Exchanger通过exchage方法进行交换数据
2.Exchanger方法适用于需要交换两个线程的数据的情景
以上纯属个人见解,如有问题请联系本人!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!