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

Java并發(fā)編程之Exchanger方法詳解

 更新時間:2021年04月12日 14:28:20   作者:我真的不會Java啊  
這篇文章主要介紹了Java并發(fā)編程之Exchanger方法詳解,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

簡介

Exchanger是一個用于線程間數(shù)據(jù)交換的工具類,它提供一個公共點(diǎn),在這個公共點(diǎn),兩個線程可以交換彼此的數(shù)據(jù)。

當(dāng)一個線程調(diào)用exchange方法后將進(jìn)入等待狀態(tài),直到另外一個線程調(diào)用exchange方法,雙方完成數(shù)據(jù)交換后繼續(xù)執(zhí)行。

Exchanger的使用

方法介紹

exchange(V x):阻塞當(dāng)前線程,直到另外一個線程調(diào)用exchange方法或者當(dāng)前線程被中斷。

  1. x : 需要交換的對象。

exchange(V x, long timeout, TimeUnit unit):阻塞當(dāng)前線程,直到另外一個線程調(diào)用exchange方法或者當(dāng)前線程被中斷或者等待超時。

  • x: 需要交換的對象。
  • timeout:超時時間。
  • unit:超時時間單位。

exchange方法正常情況返回交換到的對象,當(dāng)當(dāng)前線程被中斷或者等待超時時,exchange方法返回null。

示例1:A同學(xué)和B同學(xué)交換各自收藏的大片

public class Demo {
    public static void main(String[] args) {
        Exchanger<String> stringExchanger = new Exchanger<>();

        Thread studentA = new Thread(() -> {
            try {
                String dataA = "A同學(xué)收藏多年的大片";
                String dataB = stringExchanger.exchange(dataA);
                System.out.println("A同學(xué)得到了" + dataB);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread studentB = new Thread(() -> {
            try {
                String dataB = "B同學(xué)收藏多年的大片";
                String dataA = stringExchanger.exchange(dataB);
                System.out.println("B同學(xué)得到了" + dataA);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        studentA.start();
        studentB.start();
    }
}

/*
 * 輸出結(jié)果:
 * B同學(xué)得到了A同學(xué)收藏多年的大片
 * A同學(xué)得到了B同學(xué)收藏多年的大片
 */

示例2:A同學(xué)被放鴿子,交易失敗

public class Demo {
    public static void main(String[] args) {
        Exchanger<String> stringExchanger = new Exchanger<>();

        Thread studentA = new Thread(() -> {
            String dataB = null;
            try {
                String dataA = "A同學(xué)收藏多年的大片";
                //最多等待5秒
                dataB = stringExchanger.exchange(dataA, 5, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (TimeoutException ex){
                System.out.println("等待超時-TimeoutException");
            }

            System.out.println("A同學(xué)得到了" + dataB);
        });

        studentA.start();
    }
}

/*
 * 輸出結(jié)果:
 * 等待超時-TimeoutException
 * A同學(xué)得到了null
 */

到此這篇關(guān)于Java并發(fā)編程之Exchanger方法詳解的文章就介紹到這了,更多相關(guān)Java并發(fā)編程Exchanger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程中的CyclicBarrier使用方法詳解

    Java多線程中的CyclicBarrier使用方法詳解

    這篇文章主要介紹了Java多線程中的CyclicBarrier使用方法詳解,CyclicBarrier是一種同步輔助工具,它允許一組線程都等待對方到達(dá)公共障礙點(diǎn),在涉及固定大小的線程的程序中,CyclicBarriers非常有用,這些線程間必須相互等待,需要的朋友可以參考下
    2023-12-12
  • java?NIO實(shí)現(xiàn)簡單聊天程序

    java?NIO實(shí)現(xiàn)簡單聊天程序

    這篇文章主要為大家詳細(xì)介紹了java?NIO實(shí)現(xiàn)簡單聊天程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 簡單的java讀取文件示例分享

    簡單的java讀取文件示例分享

    這篇文章主要介紹了java讀取txt文件內(nèi)容,示例很簡單,代碼里有注釋,大家直接看代碼吧
    2014-01-01
  • java通過反射創(chuàng)建對象并調(diào)用方法

    java通過反射創(chuàng)建對象并調(diào)用方法

    這篇文章主要介紹了java通過反射創(chuàng)建對象并調(diào)用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • java并發(fā)無鎖多線程單線程示例詳解

    java并發(fā)無鎖多線程單線程示例詳解

    這篇文章主要為大家介紹了java并發(fā)無鎖多線程單線程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 剖析Fork?join并發(fā)框架工作竊取算法

    剖析Fork?join并發(fā)框架工作竊取算法

    這篇文章主要為大家剖析介紹了Fork?join并發(fā)框架工作竊取算法的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 深入同步訪問共享的可變數(shù)據(jù)分析

    深入同步訪問共享的可變數(shù)據(jù)分析

    本篇文章是對同步訪問共享的可變數(shù)據(jù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • idea2020.1最新版永久破解/pycharm也可用(步驟詳解)

    idea2020.1最新版永久破解/pycharm也可用(步驟詳解)

    這篇文章主要介紹了idea2020.1最新版永久破解/pycharm也可用,本文給大家分享簡單實(shí)現(xiàn)步驟,通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring Boot整合ElasticSearch實(shí)現(xiàn)多版本兼容的方法詳解

    Spring Boot整合ElasticSearch實(shí)現(xiàn)多版本兼容的方法詳解

    簡單說,ElasticSearch(簡稱 ES)是搜索引擎,是結(jié)構(gòu)化數(shù)據(jù)的分布式搜索引擎。下面這篇文章主要給大家介紹了關(guān)于Spring Boot整合ElasticSearch實(shí)現(xiàn)多版本兼容的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05
  • Spring的請求映射handlerMapping以及原理詳解

    Spring的請求映射handlerMapping以及原理詳解

    這篇文章主要介紹了Spring的請求映射handlerMapping以及原理詳解,我們每次發(fā)請求,它到底是怎么找到我們哪個方法來去處理這個請求,因?yàn)槲覀冎浪械恼埱筮^來都會來到DispatcherServlet,springboot底層還是使用的是springMVC,需要的朋友可以參考下
    2023-08-08

最新評論