java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器
java.util.concurrent.Exchanger可以用來(lái)進(jìn)行數(shù)據(jù)交換,或者被稱為“數(shù)據(jù)交換器”。兩個(gè)線程可以使用Exchanger交換數(shù)據(jù),下圖用來(lái)說(shuō)明Exchanger的作用

在下面的代碼中
- 首先我們定義了一個(gè)Exchanger,用于數(shù)據(jù)交換
- 然后定義了兩個(gè)線程對(duì)象bookExchanger1和bookExchanger2,兩個(gè)線程都持有Exchanger交換器對(duì)象用于數(shù)據(jù)交換
- 兩個(gè)線程中的每個(gè)線程都有自己的數(shù)據(jù),比如下面代碼中的String[] 書(shū)籍?dāng)?shù)組。
public static void main(String[] args) {
//數(shù)據(jù)交換器-數(shù)據(jù)為book
Exchanger<String> exchanger = new Exchanger<>();
//換書(shū)線程1
BookExchanger bookExchanger1
= new BookExchanger(exchanger, new String[]{"Java從入門到放棄","Java編程思想"});
//換書(shū)線程2
BookExchanger bookExchanger2
= new BookExchanger(exchanger, new String[]{"C語(yǔ)言程序設(shè)計(jì)","實(shí)戰(zhàn)Python數(shù)據(jù)分析"});
new Thread(bookExchanger1).start();
new Thread(bookExchanger2).start();
}
BookExchanger 繼承自Runnable代表參與換書(shū)的換書(shū)讀者,他持有Exchanger數(shù)據(jù)交換器用于交換圖書(shū)。
public class BookExchanger implements Runnable{
Exchanger<String> exchanger = null; //數(shù)據(jù)交換器
String[] books = null; //圖書(shū)數(shù)組
public BookExchanger(Exchanger<String> exchanger, String[] books) {
this.exchanger = exchanger;
this.books = books;
}
@Override
public void run() {
try {
for(String bookName : books) {
//交換數(shù)據(jù),bookName為我的書(shū),exBook為我換回來(lái)的書(shū)
String exBook = this.exchanger.exchange(bookName);
System.out.println(
Thread.currentThread().getName() +
" 用《 " + bookName + "》 換 《 " + exBook + "》"
);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
執(zhí)行上文中的代碼,得到如下的打印輸出??梢钥吹街挥袃蓚€(gè)線程完成一次交換之后,才能再進(jìn)行下一次的交換。
Thread-1 用《 C語(yǔ)言程序設(shè)計(jì)》 換 《 Java從入門到放棄》
Thread-0 用《 Java從入門到放棄》 換 《 C語(yǔ)言程序設(shè)計(jì)》
Thread-1 用《 實(shí)戰(zhàn)Python數(shù)據(jù)分析》 換 《 Java編程思想》
Thread-0 用《 Java編程思想》 換 《 實(shí)戰(zhàn)Python數(shù)據(jù)分析》
以上就是java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器的詳細(xì)內(nèi)容,更多關(guān)于java并發(fā)Exchanger數(shù)據(jù)交換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot + 微信公眾號(hào)JSAPI支付功能的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot + 微信公眾號(hào)JSAPI支付功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
詳解Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法
Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法,本文總結(jié)了幾種方法,分別是:包級(jí)函數(shù)、伴生對(duì)象、擴(kuò)展函數(shù)和對(duì)象聲明。這需要大家根據(jù)不同的情況進(jìn)行選擇。2017-05-05
SpringSecurity實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限信息的方法
這篇文章主要介紹了SpringSecurity實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限信息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定需要的朋友可以參考下2022-01-01
詳解mybatis-plus的 mapper.xml 路徑配置的坑
這篇文章主要介紹了詳解mybatis-plus的 mapper.xml 路徑配置的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Springboot整合微信支付(訂單過(guò)期取消及商戶主動(dòng)查單)
本文主要介紹了Springboot整合微信支付(訂單過(guò)期取消及商戶主動(dòng)查單),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
SpringBoot YAML語(yǔ)法基礎(chǔ)詳細(xì)整理
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語(yǔ)言)的遞歸縮寫(xiě)。在開(kāi)發(fā)的這種語(yǔ)言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語(yǔ)言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

