一Exchanger
- java.util.concurrent包中
- 只可以用於兩個線程之間交換信息。
二案例
public class ExchangerTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Exchanger exchanger = new Exchanger();
service.execute(new Runnable(){
public void run() {
try {
String data1 = "A";
System.out.println(Thread.currentThread().getName() + "正在把數據" + data1 +"換出去");
Thread.sleep((long)(Math.random()*3000));
//線程交換數據
String data2 = (String)exchanger.exchange(data1);
System.out.println(Thread.currentThread().getName() + "換回的數據爲" + data2);
}catch(Exception e){
}
}
});
service.execute(new Runnable(){
public void run() {
try {
String data1 = "B";
System.out.println(Thread.currentThread().getName() + "正在把數據" + data1 +"換出去");
Thread.sleep((long)(Math.random()*3000));
//線程交換數據
String data2 = (String)exchanger.exchange(data1);
System.out.println(Thread.currentThread().getName() + "換回的數據爲" + data2);
}catch(Exception e){
}
}
});
}
}
三結果分析
pool-1-thread-1正在把數據A換出去
pool-1-thread-2正在把數據B換出去---解釋
2個線程都在這裏等待3秒後纔開始交換數據
---解釋
pool-1-thread-2換回的數據爲A
pool-1-thread-1換回的數據爲B