最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

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)文章

  • 基于@Table注解無法使用及報紅的解決

    基于@Table注解無法使用及報紅的解決

    這篇文章主要介紹了基于@Table注解無法使用及報紅的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實(shí)現(xiàn)最小生成樹算法詳解

    Java實(shí)現(xiàn)最小生成樹算法詳解

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)最小生成樹算法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-04-04
  • SpringMvc獲取請求頭請求體消息過程解析

    SpringMvc獲取請求頭請求體消息過程解析

    這篇文章主要介紹了SpringMvc獲取請求頭請求體消息過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • java數(shù)組排序示例分享

    java數(shù)組排序示例分享

    這篇文章主要介紹了java數(shù)組排序示例,需要的朋友可以參考下
    2014-03-03
  • Kafka攔截器的神奇操作方法

    Kafka攔截器的神奇操作方法

    Kafka攔截器是一種強(qiáng)大的機(jī)制,用于在消息發(fā)送和接收過程中插入自定義邏輯,它們可以用于消息定制、日志記錄、監(jiān)控、業(yè)務(wù)邏輯集成、性能統(tǒng)計和異常處理等,本文介紹Kafka攔截器的神奇操作,感興趣的朋友一起看看吧
    2025-01-01
  • 從0開始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐

    從0開始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐

    這篇文章主要介紹了從0開始學(xué)習(xí)大數(shù)據(jù)之java spark編程入門與項(xiàng)目實(shí)踐,結(jié)合具體入門項(xiàng)目分析了大數(shù)據(jù)java spark編程項(xiàng)目建立、調(diào)試、輸出等相關(guān)步驟及操作技巧,需要的朋友可以參考下
    2019-11-11
  • java操作Apache druid的實(shí)例代碼

    java操作Apache druid的實(shí)例代碼

    這篇文章主要介紹了java操作Apache druid的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Spring注解驅(qū)動之BeanDefinitionRegistryPostProcessor原理解析

    Spring注解驅(qū)動之BeanDefinitionRegistryPostProcessor原理解析

    這篇文章主要介紹了Spring注解驅(qū)動之BeanDefinitionRegistryPostProcessor原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Mybatis中 SQL語句復(fù)用

    Mybatis中 SQL語句復(fù)用

    這篇文章主要介紹了Mybatis中 SQL語句復(fù)用,需要的朋友可以參考下
    2017-03-03
  • Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫數(shù)字識別的示例詳解

    Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫數(shù)字識別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)MNIST手寫數(shù)字識別的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01

最新評論

乡城县| 行唐县| 卫辉市| 寿宁县| 扬州市| 浙江省| 丹江口市| 通城县| 栖霞市| 石门县| 抚松县| 宿州市| 永胜县| 金沙县| 清镇市| 凤庆县| 方城县| 盐池县| 包头市| 炎陵县| 九台市| 新巴尔虎右旗| 明溪县| 伊宁县| 巴马| 乌鲁木齐市| 宁陵县| 古浪县| 门头沟区| 黄平县| 周宁县| 久治县| 志丹县| 尼玛县| 泰州市| 宜兰市| 望城县| 华坪县| 临城县| 麻栗坡县| 湖口县|