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

Java高并發(fā)中的交換器Exchanger解析

 更新時(shí)間:2023年12月02日 10:07:34   作者:safe_u  
這篇文章主要介紹了Java高并發(fā)中的交換器Exchanger解析,如果兩個(gè)線程并行處理,但在某個(gè)時(shí)刻需要互相交換自己已經(jīng)處理完的中間數(shù)據(jù),然后才能繼續(xù)往下執(zhí)行,這個(gè)時(shí)候就可以使用 Exchanger,需要的朋友可以參考下

1.Exchanger簡(jiǎn)介

Exchanger — 交換器,是JDK1.5時(shí)引入的一個(gè)同步器,從字面上就可以看出,這個(gè)類(lèi)的主要作用是交換數(shù)據(jù)。

如果兩個(gè)線程并行處理,但在某個(gè)時(shí)刻需要互相交換自己已經(jīng)處理完的中間數(shù)據(jù),然后才能繼續(xù)往下執(zhí)行。這個(gè)時(shí)候就可以使用 Exchanger。

Thread1線程到達(dá)柵欄后,會(huì)首先觀察有沒(méi)其它線程已經(jīng)到達(dá)柵欄,如果沒(méi)有就會(huì)等待,如果已經(jīng)有其它線程(Thread2)已經(jīng)到達(dá)了,就會(huì)以成對(duì)的方式交換各自攜帶的信息,因此Exchanger非常適合用于兩個(gè)線程之間的數(shù)據(jù)交換。

2.Exchanger的使用

2.1 常用方法

//實(shí)現(xiàn)數(shù)據(jù)交換,x是交換的數(shù)據(jù),V是返回對(duì)方線程傳遞的數(shù)據(jù)
public V exchange(V x) throws InterruptedException
?
//用于交換,啟動(dòng)交換并等待另一個(gè)線程調(diào)用exchange,并且設(shè)置最大等待時(shí)間,當(dāng)?shù)却龝r(shí)間超過(guò)timeout便停止等待。
public V exchange(V x, long timeout, TimeUnit unit)

2.2 使用舉例

//數(shù)據(jù)交換器,用于數(shù)據(jù)交換
        Exchanger<String> exchanger = new Exchanger<>();
?
        //換書(shū)線程1
        new Thread(()->{
            String[] books_A = new String[]{"C++","操作系統(tǒng)"};//圖書(shū)數(shù)組
            for (String bookNameA:books_A) {
                try {
                    //交換數(shù)據(jù),bookNameA為我的書(shū),exBook_A為我換回來(lái)的書(shū)
                    //System.out.println("線程A準(zhǔn)備提交《"+bookNameA+"》書(shū)籍,等待交換...");
                    String exBook_A = exchanger.exchange(bookNameA);
                    System.out.println(Thread.currentThread().getName()+" 用 《"+bookNameA+"》換《"+exBook_A+"》");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
?
        },"線程A").start();
?
        //換書(shū)線程2
        new Thread(()->{
            String[] books_B = new String[]{"Java攻略","并發(fā)編程"};//圖書(shū)數(shù)組
            for (String bookNameB:books_B) {
                try {
                    String exBook_B = exchanger.exchange(bookNameB);
                    System.out.println(Thread.currentThread().getName()+" 用 《"+bookNameB+"》換《"+exBook_B+"》");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"線程B").start();
  • Exchanger 支持多個(gè)線程做數(shù)據(jù)交換;
  • 多個(gè)線程使用同一個(gè) Exchanger 做數(shù)據(jù)交換時(shí),結(jié)果隨機(jī),只要湊滿(mǎn)一對(duì),就會(huì)進(jìn)行交換。

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

相關(guān)文章

  • SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖主要通過(guò)前端和后端兩種方式實(shí)現(xiàn),前端通過(guò)JavaScript控制用戶(hù)操作,后端通過(guò)攔截器、過(guò)濾器等機(jī)制控制請(qǐng)求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下
    2024-11-11
  • SpringBoot超詳細(xì)講解yaml配置文件

    SpringBoot超詳細(xì)講解yaml配置文件

    這篇文章主要介紹了SpringBoot中的yaml配置文件問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • java使用poi讀取excel內(nèi)容方法實(shí)例

    java使用poi讀取excel內(nèi)容方法實(shí)例

    本文介紹java使用poi讀取excel內(nèi)容的實(shí)例,大家參考使用吧
    2014-01-01
  • Java計(jì)算幾何圖形面積的實(shí)例代碼

    Java計(jì)算幾何圖形面積的實(shí)例代碼

    這篇文章主要介紹了Java計(jì)算幾何圖形面積的實(shí)例代碼,需要的朋友可以參考下
    2014-03-03
  • Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    這篇文章主要介紹了Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java文件操作工具類(lèi)fileUtil實(shí)例【文件增刪改,復(fù)制等】

    Java文件操作工具類(lèi)fileUtil實(shí)例【文件增刪改,復(fù)制等】

    這篇文章主要介紹了Java文件操作工具類(lèi)fileUtil,結(jié)合實(shí)例形式分析了java針對(duì)文件進(jìn)行讀取、增加、刪除、修改、復(fù)制等操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 啟動(dòng) Spring 或 Spring Boot 項(xiàng)目需要 Tomcat的原因解析

    啟動(dòng) Spring 或 Spring Boot 項(xiàng)目需要 T

    本文的內(nèi)容是學(xué)習(xí)關(guān)于Tomcat的基本知識(shí),介紹了Tomcat為什么是一個(gè) Web 應(yīng)用服務(wù)器,為什么是 Servlet 容器,同時(shí)總結(jié)了 Tomcat 的一些功能原理,并詳細(xì)介紹了 Tomcat 在 Spring 和SpringBoot 項(xiàng)目中的使用原理,本文不涉及安裝和使用說(shuō)明,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 詳解如何有效地處理Java中的多線程

    詳解如何有效地處理Java中的多線程

    在現(xiàn)代軟件開(kāi)發(fā)中,多線程編程已成為提高程序性能和響應(yīng)速度的重要手段,Java提供了豐富的多線程支持,使得在Java中實(shí)現(xiàn)并發(fā)操作變得相對(duì)簡(jiǎn)單,本文將深入探討Java多線程編程的基本概念、常見(jiàn)問(wèn)題和最佳實(shí)踐,需要的朋友可以參考下
    2024-06-06
  • Java?Apache?common-pool對(duì)象池介紹

    Java?Apache?common-pool對(duì)象池介紹

    這篇文章主要介紹了Java Apache?common-pool對(duì)象池介紹,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析

    Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析

    這篇文章主要介紹了Java自定義實(shí)現(xiàn)equals()方法過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

河池市| 兰溪市| 海兴县| 丰原市| 江陵县| 天全县| 信宜市| 清水河县| 闵行区| 崇义县| 淅川县| 屯留县| 辽源市| 织金县| 府谷县| 京山县| 平武县| 永靖县| 巴里| 株洲市| 卢龙县| 肇源县| 中方县| 陆河县| 栾川县| 南雄市| 上栗县| 开鲁县| 南丰县| 商河县| 长葛市| 玉田县| 房产| 浦县| 西华县| 英超| 合山市| 图们市| 鹤峰县| 通榆县| 松滋市|