亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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è)類的主要作用是交換數(shù)據(jù)。

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

Thread1線程到達(dá)柵欄后,會(huì)首先觀察有沒其它線程已經(jīng)到達(dá)柵欄,如果沒有就會(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í)間超過timeout便停止等待。
public V exchange(V x, long timeout, TimeUnit unit)

2.2 使用舉例

//數(shù)據(jù)交換器,用于數(shù)據(jù)交換
        Exchanger<String> exchanger = new Exchanger<>();
?
        //換書線程1
        new Thread(()->{
            String[] books_A = new String[]{"C++","操作系統(tǒng)"};//圖書數(shù)組
            for (String bookNameA:books_A) {
                try {
                    //交換數(shù)據(jù),bookNameA為我的書,exBook_A為我換回來的書
                    //System.out.println("線程A準(zhǔn)備提交《"+bookNameA+"》書籍,等待交換...");
                    String exBook_A = exchanger.exchange(bookNameA);
                    System.out.println(Thread.currentThread().getName()+" 用 《"+bookNameA+"》換《"+exBook_A+"》");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
?
        },"線程A").start();
?
        //換書線程2
        new Thread(()->{
            String[] books_B = new String[]{"Java攻略","并發(fā)編程"};//圖書數(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ī),只要湊滿一對(duì),就會(huì)進(jìn)行交換。

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

相關(guān)文章

  • Java中的繼承與接口解讀

    Java中的繼承與接口解讀

    這篇文章主要介紹了Java中的繼承與接口使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • java中Properties文件加載和使用方法

    java中Properties文件加載和使用方法

    這篇文章主要為大家詳細(xì)介紹了java中Properties文件加載和使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java使用動(dòng)態(tài)規(guī)劃算法思想解決背包問題

    Java使用動(dòng)態(tài)規(guī)劃算法思想解決背包問題

    背包問題(Knapsack problem)是一種組合優(yōu)化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高
    2022-04-04
  • 基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal''s Triangle

    基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal''s Triangle

    這篇文章主要介紹了基于Java實(shí)現(xiàn)楊輝三角 LeetCode Pascal's Triangle的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Java編程中使用XFire框架調(diào)用WebService程序接口

    Java編程中使用XFire框架調(diào)用WebService程序接口

    這篇文章主要介紹了Java編程中使用XFire調(diào)用WebService程序接口的方法,WebService是一種跨編程語言和跨操作系統(tǒng)平臺(tái)的遠(yuǎn)程調(diào)用技術(shù),需要的朋友可以參考下
    2015-12-12
  • Servlet3.0實(shí)現(xiàn)文件上傳的方法

    Servlet3.0實(shí)現(xiàn)文件上傳的方法

    本篇文章主要介紹了Servlet實(shí)現(xiàn)文件上傳的方法,所謂文件上傳就是將本地的文件發(fā)送到服務(wù)器中保存。有興趣的可以了解一下。
    2017-03-03
  • 簡(jiǎn)單了解Spring Web相關(guān)模塊運(yùn)行原理

    簡(jiǎn)單了解Spring Web相關(guān)模塊運(yùn)行原理

    這篇文章主要介紹了簡(jiǎn)單了解Spring Web相關(guān)模塊運(yùn)行原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java詳細(xì)分析講解泛型

    Java詳細(xì)分析講解泛型

    在正式進(jìn)入內(nèi)容之前說明一下:泛型的內(nèi)容太多,也太復(fù)雜。這里因?yàn)镴ava中寫數(shù)據(jù)結(jié)構(gòu)的時(shí)候會(huì)使用到,所以加上。關(guān)于泛型我找了挺多文章,再結(jié)合自己的理解,盡可能將其講清楚。不求會(huì)使用泛型,只要求后面數(shù)據(jù)結(jié)構(gòu)出現(xiàn)泛型的時(shí)候能夠知道是在干什么即可
    2022-05-05
  • java使用Hashtable過濾數(shù)組中重復(fù)值的方法

    java使用Hashtable過濾數(shù)組中重復(fù)值的方法

    這篇文章主要介紹了java使用Hashtable過濾數(shù)組中重復(fù)值的方法,涉及java數(shù)組遍歷及過濾的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • RocketMQ生產(chǎn)消息與消費(fèi)消息超詳細(xì)講解

    RocketMQ生產(chǎn)消息與消費(fèi)消息超詳細(xì)講解

    這篇文章主要介紹了RocketMQ生產(chǎn)消息與消費(fèi)消息,RocketMQ可用于以三種方式發(fā)送消息:可靠的同步、可靠的異步和單向傳輸。前兩種消息類型是可靠的,因?yàn)闊o論它們是否成功發(fā)送都有響應(yīng)
    2022-12-12

最新評(píng)論