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

Java线程通信-Exchanger

2017-06-10 17:20 162 查看
Exchanger

帮助两个线程之间交换数据,不过要两个线程都先拿出数据,然后才能进行数据交换

测试代码

package com.zhiwei.thread;

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*特点: 一定要等双方将数据都拿出来后才能交换(只能是两个线程)
* @author Yang ZhiWei
*
*/
public class ExchangerTest {

public static void main(String[] args) {

ExecutorService threadPool=Executors.newCachedThreadPool();

Exchanger<String> exchanger=new Exchanger<String>();

threadPool.execute(new Runnable() {
@Override
public void run() {

System.out.println(Thread.currentThread().getName()+":交换数据:"+Thread.currentThread().getName());
try {
String getDate = exchanger.exchange(Thread.currentThread().getName());

System.out.println(Thread.currentThread().getName()+":收到数据:"+getDate);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

threadPool.execute(new Runnable() {
@Override
public void run() {

System.out.println(Thread.currentThread().getName()+"交换数据:"+Thread.currentThread().getName());
try {

String getDate = exchanger.exchange(Thread.currentThread().getName());

System.out.println(Thread.currentThread().getName()+"收到数据:"+getDate);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
threadPool.shutdown();
}
}


效果

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