您的位置:首页 > 编程语言 > Java开发

java 多线程-实例数据交换器 Exchanger

2017-12-05 20:20 603 查看
实例数据交换器用于在两个线程之间,相同类型的实例数据交互。比如讲线程A中的一个People实例的数据传递给线程B的一个People实例,

public class Test{
public static void main(String[] arg){

Exchanger<People> ex = new Exchanger<>();
Runnable taskA = ()->{
People pA = new People("A",1);
try {
Thread.sleep(2000);
//ex.exchange(pA);
//调用后将会返回一个 将会被清除数据的pA类型一样的实例 exchange 调用后taskA将会被阻塞 直到 taskB调用exchange后才会继续
pA = ex.exchange(pA);
Thread.sleep(2000);
System.out.println("任务A:"+pA.getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
};

Runnable taskB = ()->{
//首先申明一个没有数据的实例待会儿接受数据
People pB = new People();
try {
Thread.sleep(5000);
//调用后,pB实例将会获得pA的数据
pB = ex.exchange(pB);
Thread.sleep(2000);
System.out.println("任务B:"+pB.getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
};

new Thread(taskA,"Thread-A").start();
new Thread(taskB,"Thread-B").start();
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: