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

Java開發(fā)JUC交換器Exchanger使用詳解

 更新時(shí)間:2022年12月06日 11:02:44   作者:JAVA旭陽  
這篇文章主要為大家介紹了Java開發(fā)JUC交換器Exchanger使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

JDK中提供了不少的同步工具,現(xiàn)在分享一個(gè)相對(duì)比較冷門的同步工具——交換器(Exchanger)。你知道Exchanger的作用是什么嗎?實(shí)現(xiàn)機(jī)制是什么?可以用來做什么呢?

Exchanger介紹

交換器(Exchanger),顧名思義,用于兩個(gè)線程之間進(jìn)行數(shù)據(jù)交換的。

簡(jiǎn)單來說,就是一個(gè)線程在完成一定的事務(wù)后想與另一個(gè)線程交換數(shù)據(jù),則第一個(gè)先拿出數(shù)據(jù)的線程會(huì)一直等待第二個(gè)線程,直到第二個(gè)線程拿著數(shù)據(jù)到來時(shí)才能彼此交換對(duì)應(yīng)數(shù)據(jù)。如下圖所示:

兩個(gè)線程通過 exchange() 方法交換數(shù)據(jù),如果第一個(gè)線程先執(zhí)行 exchange() 方法,它會(huì)一直等待第二個(gè)線程也執(zhí)行 exchange 方法,當(dāng)兩個(gè)線程都到達(dá)同步點(diǎn)時(shí),這兩個(gè)線程就可以交換數(shù)據(jù)

API介紹

構(gòu)造方法

  • Exchanger():創(chuàng)建一個(gè)交換器

常用方法

  • V exchange(V x): 交換數(shù)據(jù),如果只有一個(gè)線程,會(huì)阻塞,直到另外一個(gè)線程也調(diào)用exchange, 支持中斷
  • V exchange(V x, long timeout, TimeUnit unit): 帶超時(shí)參數(shù)的交換數(shù)據(jù)

Exchanger使用

這不,馬上圣誕節(jié)要到了,你要和你對(duì)象交換禮物,不準(zhǔn)備的話,你就要死的很慘~~我們就可以用Exchanger來實(shí)現(xiàn)。

@Slf4j(topic = "c.ExchangerTest")
public class ExchangerTest {
    public static void main(String[] args) throws InterruptedException {
        Exchanger<String> exchanger = new Exchanger<>();
        Thread boy = new Thread(new Runnable() {
            @Override
            public void run() {
                log.info("你開始準(zhǔn)備禮物~~~~~~~~~~~~");
                try {
                    // 模擬準(zhǔn)備禮物時(shí)間
                    Thread.sleep(5000);
                    String gift = "IPhone 14";
                    log.info("你送了禮物: {}",  gift);
                    String recGift = exchanger.exchange(gift);
                    log.info("你收到了禮物: {}",  recGift);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        Thread girl = new Thread(new Runnable() {
            @Override
            public void run() {
                log.info("女朋友開始準(zhǔn)備禮物~~~~~~~~~~~~");
                try {
                    // 模擬準(zhǔn)備禮物時(shí)間
                    Thread.sleep(6000);
                    String gift = "一個(gè)吻";
                    log.info("女朋友送了禮物: {}",  gift);
                    String recGift = exchanger.exchange(gift);
                    log.info("女朋友收到了禮物: {}",  recGift);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        boy.start();
        girl.start();
        boy.join();
        girl.join();
    }
}

運(yùn)行結(jié)果:

  • 中間阻塞等待了一秒,直到你女朋友也準(zhǔn)備好了禮物。

實(shí)現(xiàn)機(jī)制

實(shí)現(xiàn)機(jī)制也很容易能夠想到,Exchanger類中定義一個(gè)槽位slot,

  • A線程交換數(shù)據(jù)時(shí),發(fā)現(xiàn)slot為空,則將需要交換的數(shù)據(jù)放在slot中, 阻塞當(dāng)前線程,等待其它線程進(jìn)來交換數(shù)據(jù)
  • 等線程B進(jìn)來,讀取A設(shè)置的數(shù)據(jù),然后設(shè)置線程B需要交換的數(shù)據(jù),然后喚醒A線程。

Exchanger的源碼實(shí)現(xiàn)大家感興趣的話,自己可以看看。

總結(jié)

本文講解了交換器Exchanger,是jdk5中引入的一個(gè)同步器。實(shí)際上在平時(shí)工作場(chǎng)景中基本上很少應(yīng)用,按照官方注釋說可以應(yīng)用在基因算法或者管道設(shè)計(jì),太抽象了,大家就當(dāng)擴(kuò)擴(kuò)知識(shí)面吧,更多關(guān)于Java JUC交換器Exchanger的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java開發(fā)之鬧鐘的實(shí)現(xiàn)代碼

    java開發(fā)之鬧鐘的實(shí)現(xiàn)代碼

    本篇文章介紹了,在java中鬧鐘的實(shí)現(xiàn)代碼。需要的朋友參考下
    2013-05-05
  • Mybatis-plus新版本分頁失效PaginationInterceptor過時(shí)的問題

    Mybatis-plus新版本分頁失效PaginationInterceptor過時(shí)的問題

    這篇文章主要介紹了Mybatis-plus新版本分頁失效,PaginationInterceptor過時(shí)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式

    Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式

    這篇文章主要介紹了Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式,本文通過兩種方式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 開發(fā)者在Idea 中常見的配置,你都了解嗎

    開發(fā)者在Idea 中常見的配置,你都了解嗎

    idea這款java開發(fā)工具真是好用無比,不僅好用而且界面也很好看,有黑白主題,功能強(qiáng)大配置簡(jiǎn)單,好了不多說了,今天給大家羅列下Idea 中常見的配置,喜歡的朋友一起看看吧
    2021-06-06
  • SpringBoot整合Redis時(shí)遇到連接問題的解決方法

    SpringBoot整合Redis時(shí)遇到連接問題的解決方法

    在使用Spring Boot整合Redis的過程中,經(jīng)常會(huì)遇到連接問題,尤其是當(dāng)Redis服務(wù)部署在遠(yuǎn)程服務(wù)器上時(shí),所以本文給大家介紹了SpringBoot整合Redis遇到連接問題的解決方法,需要的朋友可以參考下
    2024-11-11
  • IDEA無法使用Git?Pull的問題

    IDEA無法使用Git?Pull的問題

    本文主要介紹了IDEA無法使用Git?Pull的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • eclipse 安裝lombok插件

    eclipse 安裝lombok插件

    這篇文章主要介紹了eclipse 安裝lombok插件的詳細(xì)步驟,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+mysql+maven+tomcat實(shí)現(xiàn)一個(gè)文創(chuàng)商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java 自動(dòng)安裝校驗(yàn)TLS/SSL證書

    Java 自動(dòng)安裝校驗(yàn)TLS/SSL證書

    這篇文章主要介紹了Java 自動(dòng)安裝校驗(yàn)TLS/SSL證書的示例,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-10-10
  • Java設(shè)計(jì)模式中橋接模式應(yīng)用詳解

    Java設(shè)計(jì)模式中橋接模式應(yīng)用詳解

    橋接,顧名思義,就是用來連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-11-11

最新評(píng)論

苏尼特右旗| 霸州市| 英德市| 北海市| 泰和县| 新昌县| 原阳县| 会东县| 阜平县| 阜新| 永福县| 玉屏| 玛多县| 峨边| 肥乡县| 岳西县| 绥阳县| 宿松县| 射洪县| 岳阳县| 黑山县| 小金县| 河东区| 邢台市| 始兴县| 皮山县| 开远市| 荥经县| 潮州市| 资阳市| 周至县| 富锦市| 苏尼特左旗| 济宁市| 洪洞县| 伊春市| 文成县| 宜良县| 金湖县| 临汾市| 达尔|