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

Java并發(fā)編程中的Exchanger解析

 更新時(shí)間:2023年11月30日 08:49:11   作者:MC-閏土  
這篇文章主要介紹了Java并發(fā)編程中的Exchanger解析,Exchanger用于線程間數(shù)據(jù)的交換,它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù),這兩個(gè)線程通過exchange方法交換數(shù)據(jù),如果第一個(gè)線程先執(zhí)行exchange()方法,需要的朋友可以參考下

概述

用于線程間數(shù)據(jù)的交換。它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù)。這兩個(gè)線程通過exchange方法交換數(shù)據(jù),如果第一個(gè)線程先執(zhí)行exchange()方法,它會(huì)一直等待第二個(gè)線程也執(zhí)行exchange方法,當(dāng)兩個(gè)線程都到達(dá)同步點(diǎn)時(shí),這兩個(gè)線程就可以交換數(shù)據(jù),將本線程生產(chǎn)出來的數(shù)據(jù)傳遞給對(duì)方。

Exchanger 可被視為 SynchronousQueue 的雙向形式。Exchanger在遺傳算法和管道設(shè)計(jì)等應(yīng)用中很有用。

內(nèi)存一致性:對(duì)于通過 Exchanger 成功交換對(duì)象的每對(duì)線程,每個(gè)線程中在 exchange() 之前的操作 happen-before 從另一線程中相應(yīng)的 exchange() 返回的后續(xù)操作。

方法

提供的方法:

    // 等待另一個(gè)線程到達(dá)此交換點(diǎn)(除非當(dāng)前線程被中斷),然后將給定的對(duì)象傳送給該線程,并接收該線程的對(duì)象。
    public V exchange(V x) throws InterruptedException
    //增加超時(shí)機(jī)制,超過指定時(shí)間,拋TimeoutException異常
    public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException

使用示例

該類使用 Exchanger 在線程間交換緩沖區(qū),因此,在需要時(shí),填充緩沖區(qū)的線程獲取一個(gè)新騰空的緩沖區(qū),并將填滿的緩沖區(qū)傳遞給清空緩沖區(qū)的線程。

class FillAndEmpty {
    Exchanger<DataBuffer> exchanger = new Exchanger<DataBuffer>();
    DataBuffer initialEmptyBuffer = ... a made-up type
    DataBuffer initialFullBuffer = ...
    
    //填充緩沖區(qū)線程
    class FillingLoop implements Runnable {
        public void run() {
            DataBuffer currentBuffer = initialEmptyBuffer;    //空的緩沖區(qū)
            try {
                while (currentBuffer != null) {
                    addToBuffer(currentBuffer);    //填充數(shù)據(jù)
                    //如果緩沖區(qū)被數(shù)據(jù)填滿,執(zhí)行exchange。等待清空緩沖區(qū)線程也執(zhí)行exchange方法。當(dāng)兩個(gè)線程都到達(dá)同步點(diǎn),交換數(shù)據(jù)。
                    if (currentBuffer.isFull())
                        currentBuffer = exchanger.exchange(currentBuffer);    
                }
            } catch (InterruptedException ex) { ... handle ... }
        }
    }
    
    //清空緩沖區(qū)線程
    class EmptyingLoop implements Runnable {
        public void run() {
            DataBuffer currentBuffer = initialFullBuffer;    //滿的緩沖區(qū)
            try {
                while (currentBuffer != null) {
                    takeFromBuffer(currentBuffer);    //清空緩沖區(qū)
                    //如果緩沖區(qū)被清空,執(zhí)行exchange。等待填充緩沖區(qū)線程也執(zhí)行exchange方法。當(dāng)兩個(gè)線程都到達(dá)同步點(diǎn),交換數(shù)據(jù)。
                    if (currentBuffer.isEmpty())
                        currentBuffer = exchanger.exchange(currentBuffer);
                }
            } catch (InterruptedException ex) { ... handle ...}
        }
    }
 
    void start() {
        new Thread(new FillingLoop()).start();
        new Thread(new EmptyingLoop()).start();
    }
}

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

相關(guān)文章

  • Spring Jpa多數(shù)據(jù)源工程配置過程解析

    Spring Jpa多數(shù)據(jù)源工程配置過程解析

    這篇文章主要介紹了Spring Jpa多數(shù)據(jù)源工程配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java內(nèi)部類詳解

    Java內(nèi)部類詳解

    內(nèi)部類在 Java 里面算是非常常見的一個(gè)功能了,在日常開發(fā)中我們肯定多多少少都用過,這里總結(jié)一下關(guān)于 Java 中內(nèi)部類的相關(guān)知識(shí)點(diǎn)和一些使用內(nèi)部類時(shí)需要注意的點(diǎn)。
    2020-02-02
  • 解決spring boot啟動(dòng)掃描不到自定義注解的問題

    解決spring boot啟動(dòng)掃描不到自定義注解的問題

    這篇文章主要介紹了解決spring boot啟動(dòng)掃描不到自定義注解的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java設(shè)計(jì)模式之原型模式的示例詳解

    Java設(shè)計(jì)模式之原型模式的示例詳解

    原型模式(Prototype Pattern)指使用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。本文將通過案例詳細(xì)講解一下原型模式,感興趣的可以了解一下
    2022-02-02
  • SpringBoot監(jiān)視器的具體使用

    SpringBoot監(jiān)視器的具體使用

    Spring Boot監(jiān)視器是一個(gè)用于監(jiān)控和管理Spring Boot應(yīng)用程序的工具集,本文就來介紹一下SpringBoot監(jiān)視器的具體使用,感興趣的可以了解一下
    2025-01-01
  • Java中的this、super、final關(guān)鍵字詳解

    Java中的this、super、final關(guān)鍵字詳解

    這篇文章主要介紹了Java中的this、super、final關(guān)鍵字詳解,它在方法內(nèi)部使用,表示這個(gè)方法所屬對(duì)象的引用,它在構(gòu)造器內(nèi)部使用,表示該構(gòu)造器正在初始化的對(duì)象,this 可以調(diào)用類的屬性、方法和構(gòu)造器,需要的朋友可以參考下
    2023-09-09
  • sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式

    sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式

    這篇文章主要介紹了sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • javaweb中Http協(xié)議詳解

    javaweb中Http協(xié)議詳解

    HTTP是hypertext transfer protocol(超文本傳輸協(xié)議)的簡寫,它是TCP/IP協(xié)議的一個(gè)應(yīng)用層協(xié)議,用于定義WEB瀏覽器與WEB服務(wù)器之間交換數(shù)據(jù)的過程。這篇文章主要為大家詳細(xì)介紹了javaweb中的Http協(xié)議,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java如何導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目

    Java如何導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目

    Jsoup庫是一款Java的HTML解析器,可用于從網(wǎng)絡(luò)或本地文件中獲取HTML文檔并解析其中的數(shù)據(jù),這篇文章給大家介紹Java導(dǎo)入Jsoup庫做一個(gè)有趣的爬蟲項(xiàng)目,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 淺談Java三目運(yùn)算

    淺談Java三目運(yùn)算

    本文給大家主要介紹的是java中三目運(yùn)算的詳細(xì)介紹,并附上2個(gè)示例,希望對(duì)大家理解三目運(yùn)算能夠有所幫助。
    2015-03-03

最新評(píng)論

京山县| 崇信县| 綦江县| 乳山市| 扶风县| 维西| 政和县| 荆门市| 铁岭县| 竹北市| 金塔县| 苍山县| 板桥市| 洞口县| 卢氏县| 绥芬河市| 平湖市| 吉隆县| 信宜市| 云霄县| 墨竹工卡县| 涿鹿县| 乐业县| 孟津县| 乌兰浩特市| 南投县| 如东县| 灵川县| 抚顺县| 社旗县| 汉阴县| 宁河县| 资兴市| 邮箱| 梁河县| 钟祥市| 墨玉县| 高青县| 衡南县| 琼海市| 韩城市|