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

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

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

概述

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

Exchanger 可被視為 SynchronousQueue 的雙向形式。Exchanger在遺傳算法和管道設計等應用中很有用。

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

方法

提供的方法:

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

使用示例

該類使用 Exchanger 在線程間交換緩沖區(qū),因此,在需要時,填充緩沖區(qū)的線程獲取一個新騰空的緩沖區(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方法。當兩個線程都到達同步點,交換數(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方法。當兩個線程都到達同步點,交換數(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();
    }
}

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

相關文章

  • SpringBoot微服務注冊分布式Consul的詳細過程

    SpringBoot微服務注冊分布式Consul的詳細過程

    這篇文章主要介紹了SpringBoot(微服務)注冊分布式Consul,Spring Boot應用可以通過向Consul注冊自身來實現(xiàn)服務發(fā)現(xiàn)和治理,使得其他服務可以在Consul中發(fā)現(xiàn)并調用它,需要的朋友可以參考下
    2023-04-04
  • RecyclerChart的KLine的繪制

    RecyclerChart的KLine的繪制

    這篇文章主要為大家介紹了RecyclerChart的KLine的繪制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 基于solr全文檢索實現(xiàn)原理(詳談)

    基于solr全文檢索實現(xiàn)原理(詳談)

    下面小編就為大家分享一篇基于solr全文檢索實現(xiàn)原理詳談,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • 使用SpringBoot和JPA實現(xiàn)批量處理新增、修改

    使用SpringBoot和JPA實現(xiàn)批量處理新增、修改

    最近項目需要在JPA中使用ID進行批量更新,所以下面這篇文章主要給大家介紹了關于使用SpringBoot和JPA實現(xiàn)批量處理新增、修改的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 關于springboot中對sqlSessionFactoryBean的自定義

    關于springboot中對sqlSessionFactoryBean的自定義

    這篇文章主要介紹了springboot中對sqlSessionFactoryBean的自定義方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實現(xiàn)線程阻塞式方法

    java實現(xiàn)線程阻塞式方法

    Java阻塞式方法會使線程暫停執(zhí)行,不占用CPU資源直至條件滿足,常見阻塞方法如Thread.sleep()、Object.wait()和I/O操作,具有一定的參考價值,感興趣的可以了解一下
    2024-10-10
  • Java RocksDB安裝與應用

    Java RocksDB安裝與應用

    本篇文章主要給大家介紹了JAVA中RocksDB的安裝與應用,有需要到的朋友一起學習參考下。
    2017-12-12
  • Redis緩存,泛型集合與json字符串的相互轉換實例

    Redis緩存,泛型集合與json字符串的相互轉換實例

    這篇文章主要介紹了Redis緩存,泛型集合與json字符串的相互轉換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue+springboot讀取git的markdown文件并展示功能

    vue+springboot讀取git的markdown文件并展示功能

    Markdown-it 是一個用于解析和渲染 Markdown 標記語言的 JavaScript 庫,使用 Markdown-it,你可以將 Markdown 文本解析為 HTML 輸出,并且可以根據(jù)需要添加功能、擴展語法或修改解析行為,本文介紹vue+springboot讀取git的markdown文件并展示,感興趣的朋友一起看看吧
    2024-01-01
  • java實現(xiàn)word文檔轉pdf并添加水印的方法詳解

    java實現(xiàn)word文檔轉pdf并添加水印的方法詳解

    這篇文章主要介紹了java實現(xiàn)word文檔轉pdf并添加水印的方法,結合實例形式詳細分析了java word文檔轉PDF相關實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2019-09-09

最新評論