Exchaner用于实现两个线程之间的数据交换,就如同两个人约定时间地点互换物品,第一个先到的人将一直等待第二个人到来时,才能彼此互换物品。
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExchangerTest
{
public static void main(String[] args)
{
ExecutorService threadPool = Executors.newCachedThreadPool();
final Exchanger<String> exchanger = new Exchanger<String>();
threadPool.execute(new Runnable()
{
@Override
public void run()
{
try
{
String val = "待交换数据1";
System.out.println("线程:" +
Thread.currentThread().getName() + " 等待交换数据。");
Thread.sleep((long) (Math.random() * 10000));
String result = exchanger.exchange(val);
System.out.println("线程:"
+ Thread.currentThread().getName() +
" 数据交换完成 新数据为:" + result);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
threadPool.execute(new Runnable()
{
@Override
public void run()
{
try
{
String val = "待交换数据2";
System.out.println("线程:" +
Thread.currentThread().getName() + " 等待交换数据。");
Thread.sleep((long) (Math.random() * 10000));
String result = exchanger.exchange(val);
System.out.println("线程:"
+ Thread.currentThread().getName() +
" 数据交换完成 新数据为:" + result);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}