示例:用于两个线程交换数据,支持泛型
package com.yqzl.mybatis.test.thread.demo01;
import java.util.concurrent.Exchanger;
/**
* @description:
* @author: YqZhilan
* @date: 2020-07-16
*/
public class ExchangerDemo {
public static void main(String[] args) throws InterruptedException {
Exchanger<String> exchanger = new Exchanger<>();
new Thread(()->{
try {
System.out.println("这是线程A,得到了另一个线程的数据" + exchanger.exchange("这是来自线程A的数据"));
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
System.out.println("这个时候线程A是阻塞的,在等待线程B的数据");
Thread.sleep(1000);
new Thread(()->{
try {
System.out.println("这是线程B,得到了另一个线程的数据" + exchanger.exchange("这是来自线程B的数据"));
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
返回结果:
这个时候线程A是阻塞的,在等待线程B的数据
这是线程B,得到了另一个线程的数据这是来自线程A的数据
这是线程A,得到了另一个线程的数据这是来自线程B的数据