范例1:
package com.contoso;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*
* exchanger.exchange(Object x);
* exchanger.exchange(Object x , long timeout,TimeUnit);
*
*/
public class ThreadExchangeInfo {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Exchanger exchanger = new Exchanger();
service.execute(new Runnable() {
public void run() {
try {
String sendData = "id:" + Thread.currentThread().getId() + ",data:两个黄鹂鸣翠柳,一行白鹭上青天;";
System.out.println(Thread.currentThread().getName() + "准备把数据" + sendData + "拿出来交换");
String receiveData = (String) exchanger.exchange(sendData);
System.out.println(Thread.currentThread().getName() + "换回来的数据为" + receiveData);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
service.execute(new Runnable() {
public void run() {
try {
String sendData = "id:" + Thread.currentThread().getId() + ",data:窗含西岭千秋雪,门泊东吴万里船。";
System.out.println(Thread.currentThread().getName() + "准备把数据" + sendData + "拿出来交换");
String receiveData = (String) exchanger.exchange(sendData);
System.out.println(Thread.currentThread().getName() + "换回来的数据为" + receiveData);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
service.execute(new Runnable() {
public void run() {
try {
String sendData = "id:" + Thread.currentThread().getId() + ",data:《绝句》";
System.out.println(Thread.currentThread().getName() + "准备把数据" + sendData + "拿出来交换");
String receiveData = (String) exchanger.exchange(sendData);
System.out.println(Thread.currentThread().getName() + "换回来的数据为" + receiveData);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
service.execute(new Runnable() {
public void run() {
try {
String sendData = "id:" + Thread.currentThread().getId() + ",data:作者 杜甫";
System.out.println(Thread.currentThread().getName() + "准备把数据" + sendData + "拿出来交换");
String receiveData = (String) exchanger.exchange(sendData);
System.out.println(Thread.currentThread().getName() + "换回来的数据为" + receiveData);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
run:
pool-1-thread-1准备把数据id:10,data:两个黄鹂鸣翠柳,一行白鹭上青天;拿出来交换
pool-1-thread-2准备把数据id:11,data:窗含西岭千秋雪,门泊东吴万里船。拿出来交换
pool-1-thread-1换回来的数据为id:11,data:窗含西岭千秋雪,门泊东吴万里船。
pool-1-thread-2换回来的数据为id:10,data:两个黄鹂鸣翠柳,一行白鹭上青天;
pool-1-thread-2准备把数据id:11,data:《绝句》拿出来交换
pool-1-thread-1准备把数据id:10,data:作者 杜甫拿出来交换
pool-1-thread-1换回来的数据为id:11,data:《绝句》
pool-1-thread-2换回来的数据为id:10,data:作者 杜甫
BUILD SUCCESSFUL (total time: 1 minute 0 seconds)