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