欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java并發(fā)數(shù)據(jù)包Exchanger線程間的數(shù)據(jù)交換器

 更新時(shí)間:2022年03月15日 11:02:01   作者:字母  
這篇文章主要為大家介紹了java并發(fā)數(shù)據(jù)包使用數(shù)據(jù)交換器Exchanger來進(jìn)行線程之間的數(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)

    這篇文章主要介紹了SpringBoot + 微信公眾號JSAPI支付功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 深入理解Spring中RabbitMQ的Channel

    深入理解Spring中RabbitMQ的Channel

    這篇文章主要介紹了深入理解Spring中RabbitMQ的Channel,在RabbitMq中,channel表示邏輯連接或者叫虛擬連接,是棣屬于TCP連接的,一個(gè)TCP連接里可以創(chuàng)建多個(gè)channel,在Rabbit MQ里,消息的發(fā)送和接收都是基于channel的,需要的朋友可以參考下
    2023-08-08
  • 詳解Kotlin中如何實(shí)現(xiàn)類似Java或C#中的靜態(tài)方法

    詳解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-05
  • Java注解之Repeatable解讀

    Java注解之Repeatable解讀

    這篇文章主要介紹了Java注解之Repeatable,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java中的 toString()方法實(shí)例代碼

    java中的 toString()方法實(shí)例代碼

    toString()方法 相信大家都用到過,一般用于以字符串的形式返回對象的相關(guān)數(shù)據(jù)。這篇文章主要介紹了java中的 toString()方法,需要的朋友可以參考下
    2017-05-05
  • SpringSecurity實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限信息的方法

    SpringSecurity實(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 路徑配置的坑

    這篇文章主要介紹了詳解mybatis-plus的 mapper.xml 路徑配置的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Springboot整合微信支付(訂單過期取消及商戶主動(dòng)查單)

    Springboot整合微信支付(訂單過期取消及商戶主動(dòng)查單)

    本文主要介紹了Springboot整合微信支付(訂單過期取消及商戶主動(dòng)查單),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot YAML語法基礎(chǔ)詳細(xì)整理

    SpringBoot 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
  • Java常用的時(shí)間工具類實(shí)例

    Java常用的時(shí)間工具類實(shí)例

    這篇文章主要介紹了Java常用的時(shí)間工具類,結(jié)合具體實(shí)例形式分析了java日期時(shí)間的常用轉(zhuǎn)換、判斷、輸出相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評論