public class Exchanger<V>
extends Object
可以在對中對元素進行配對和交換的線程的同步點。每個線程將條目上的某個方法呈現給 exchange 方法,與伙伴線程進行匹配,并且在返回時接收其伙伴的對象。Exchanger 可能被視為 SynchronousQueue 的雙向形式。Exchanger 可能在應用程序(比如遺傳算法和管道設計)中很有用。
以上是jdk文檔的說明。
* 今天公司黨委組織活動、12點半call我電話、我以80碼的速度狂奔過去、上了一個車子(A車)、
* 戴著眼鏡四處瞄了下,沒發現什么美女啊。假寐了一會兒,司機說另外一個車子(B車)上要換過來
* 一個人、讓車子上的人下去一個去B車。由于地勢原因、我就下去了。
*
* 一路上突然想到了java線程并發庫中的Exchanger類。A車我們可以看作是一個線程、B車我們也可以
* 看作是一個線程,我和B車上的一位美女換位子,就可以用到Exchanger類的exchange方法。
*
* 代碼如下:
public class ExchangerTest {
public static void main(String[] args) {
final Exchanger<String> exchange=new Exchanger<String>();
//final String a="yupan";
//final String b="a girl";
final String[] carA=new String[]{"zhangsan","lisi","yupan"};
final String[] carB=new String[]{"meinv_a","meinv_b","meinv_c"};
//A車線程
new Thread(new Runnable(){
String[] carA_copy=carA;
@Override
public void run() {
try {
System.out.println("交換前:A車上的第三位乘客:"+carA[2]);
carA_copy[2]=exchange.exchange(carA_copy[2]);
System.out.println("交換后:A車上的第三位乘客:"+carA[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//B車線程
new Thread(new Runnable(){
String[] carB_copy=carB;
@Override
public void run() {
try {
System.out.println("交換前:B車上的第三位乘客:"+carB[2]);
carB_copy[2]=exchange.exchange(carB_copy[2]);
System.out.println("交換后:B車上的第三位乘客:"+carB[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
輸出結果:
交換前:A車上的第三位乘客:yupan
交換前:B車上的第三位乘客:meinv_c
交換后:B車上的第三位乘客:yupan
交換后:A車上的第三位乘客:meinv_c
http://blog.sina.com.cn/s/blog_7f448c5201012183.html
extends Object
可以在對中對元素進行配對和交換的線程的同步點。每個線程將條目上的某個方法呈現給 exchange 方法,與伙伴線程進行匹配,并且在返回時接收其伙伴的對象。Exchanger 可能被視為 SynchronousQueue 的雙向形式。Exchanger 可能在應用程序(比如遺傳算法和管道設計)中很有用。
以上是jdk文檔的說明。
* 今天公司黨委組織活動、12點半call我電話、我以80碼的速度狂奔過去、上了一個車子(A車)、
* 戴著眼鏡四處瞄了下,沒發現什么美女啊。假寐了一會兒,司機說另外一個車子(B車)上要換過來
* 一個人、讓車子上的人下去一個去B車。由于地勢原因、我就下去了。
*
* 一路上突然想到了java線程并發庫中的Exchanger類。A車我們可以看作是一個線程、B車我們也可以
* 看作是一個線程,我和B車上的一位美女換位子,就可以用到Exchanger類的exchange方法。
*
* 代碼如下:
public class ExchangerTest {
public static void main(String[] args) {
final Exchanger<String> exchange=new Exchanger<String>();
//final String a="yupan";
//final String b="a girl";
final String[] carA=new String[]{"zhangsan","lisi","yupan"};
final String[] carB=new String[]{"meinv_a","meinv_b","meinv_c"};
//A車線程
new Thread(new Runnable(){
String[] carA_copy=carA;
@Override
public void run() {
try {
System.out.println("交換前:A車上的第三位乘客:"+carA[2]);
carA_copy[2]=exchange.exchange(carA_copy[2]);
System.out.println("交換后:A車上的第三位乘客:"+carA[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//B車線程
new Thread(new Runnable(){
String[] carB_copy=carB;
@Override
public void run() {
try {
System.out.println("交換前:B車上的第三位乘客:"+carB[2]);
carB_copy[2]=exchange.exchange(carB_copy[2]);
System.out.println("交換后:B車上的第三位乘客:"+carB[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
輸出結果:
交換前:A車上的第三位乘客:yupan
交換前:B車上的第三位乘客:meinv_c
交換后:B車上的第三位乘客:yupan
交換后:A車上的第三位乘客:meinv_c
http://blog.sina.com.cn/s/blog_7f448c5201012183.html