java同步工具類之Exchanger
來源:程序員人生 發布時間:2015-05-13 07:57:51 閱讀次數:2491次
Exchanger 可以在對中對元素進行配對和交換的線程的同步點。每一個線程將條目上的某個方法顯現給
exchange
方法,與火伴線程進行匹配,并且在返回時接收其火伴的對象。Exchanger 可能被視為
SynchronousQueue
的雙向情勢。Exchanger 可能在利用程序(比如遺傳算法和管道設計)中很有用。
摹擬用于實現兩個之間的數據交換,每一個人在完成1定的事務后想與對方交換數據,第1個先拿出數據的人將1直等待第2個人拿出數據到來時,才能彼此交換數據。
public class ExchangerTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final Exchanger exchanger = new Exchanger();
service.execute(new Runnable(){
public void run() {
try {
String data1 = "jlj";
System.out.println("線程" + Thread.currentThread().getName() +
"正在把數據" + data1 +"換出去");
Thread.sleep((long)(Math.random()*10000));
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 = "ljy";
System.out.println("線程" + Thread.currentThread().getName() +
"正在把數據" + data1 +"換出去");
Thread.sleep((long)(Math.random()*10000));
String data2 = (String)exchanger.exchange(data1);
System.out.println("線程" + Thread.currentThread().getName() +
"換回的數據為" + data2);
}catch(Exception e){
}
}
});
}
}
結果:
線程pool⑴-thread⑴正在把數據jlj換出去
線程pool⑴-thread⑵正在把數據ljy換出去
線程pool⑴-thread⑵換回的數據為jlj
線程pool⑴-thread⑴換回的數據為ljy
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈