線程的并發(fā)工具類 --- Exchange

Exchanger(交換者)是一個(gè)用于線程間協(xié)作的工具類。Exchanger 用于進(jìn)行 線程間的數(shù)據(jù)交換。它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此 的數(shù)據(jù)。這兩個(gè)線程通過(guò) exchange 方法交換數(shù)據(jù),如果第一個(gè)線程先執(zhí)行 exchange()方法,它會(huì)一直等待第二個(gè)線程也執(zhí)行 exchange 方法,當(dāng)兩個(gè)線程都 到達(dá)同步點(diǎn)時(shí),這兩個(gè)線程就可以交換數(shù)據(jù),將本線程生產(chǎn)出來(lái)的數(shù)據(jù)傳遞給對(duì) 方。

示例:

/**

*類說(shuō)明:演示Exchange用法

*/

public class UseExchange {

private static final Exchanger>exchange =new Exchanger>();

public static void main(String[] args) {

new Thread(new Runnable() {

@Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? Set<String> setA = new HashSet<String>();//存放數(shù)據(jù)的容器

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? /*添加數(shù)據(jù)* set.add(.....)

* */

? ? ? ? ? ? ? ? ? setA = exchange.exchange(setA);//交換set

? ? ? ? ? ? ? ? ? /*處理交換后的數(shù)據(jù)*/

? ? ? ? ? ? ? ? } catch (InterruptedException e) {

}

}

? ? ? ? }).start();

new Thread(new Runnable() {

@Override

? ? ? ? ? ? public void run() {

? ? ? ? ? ? ? Set<String> setB = new HashSet<String>();//存放數(shù)據(jù)的容器

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? /*添加數(shù)據(jù)* set.add(.....)

* set.add(.....)

* */

? ? ? ? ? ? ? ? ? setB = exchange.exchange(setB);//交換set

? ? ? ? ? ? ? ? ? /*處理交換后的數(shù)據(jù)*/

? ? ? ? ? ? ? ? } catch (InterruptedException e) {

}

}

? ? ? ? }).start();

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容