摘要:使用一個交換兩個線程的數(shù)據(jù),交換期間該會被鎖住,一般用于通信領(lǐng)域。當(dāng)雙方完成交換后,交換的就為的返回值。必須指定返回值的,否則該生產(chǎn)者生產(chǎn)的將不會與消費者的空進行交換。
Exchanger 使用一個pipeline交換兩個線程的數(shù)據(jù),交換期間該Slot會被鎖住,一般用于通信領(lǐng)域。
該類提供兩個方法
// k為交換對象
exchange(V k)
//指定超時時間
exchange(V k, int timeOut, TimeUnit unit)
使用時,除了參數(shù)k必須外,返回值也必須使用k接收,否則會出現(xiàn)接收不到的數(shù)據(jù)的情況,如:
//生產(chǎn)者線程 ProductBean bean= new ProductBean() // 設(shè)置Product屬性 bean.set().... // 生產(chǎn)完成,開始與消費者交換 bean = Exchanger實例名.exchange(bean) // 消費者線程 ProductBean bean = new ProductBean(); bean = Exchanger實例名.exchange(bean)
生產(chǎn)者將生產(chǎn)的ProductBean放入pipeline中,等待交換。消費者將空Bean放入pipeline等待交換。不論是生產(chǎn)者還是消費者都必須接收exchange方法的返回值,即將exchange的bean賦值給bean。當(dāng)雙方完成交換后,交換的bean就為exchange的返回值。
必須指定返回值的bean,否則該生產(chǎn)者生產(chǎn)的bean將不會與消費者的空bean進行交換。
關(guān)于該類的最詳細解釋當(dāng)屬于源碼中的關(guān)于算法的注釋,這一部分并沒有顯示在doc文檔中,必須看源碼才能看見。該注釋中說到
The basic idea is to maintain a "slot", which is a reference to a Node containing both an Item to offer and a "hole" waiting to get filled in.
最基本的思想是維護一個Slot(槽),該Slot指向一個包含有一個用于交換的Item和一個等待填充的hole的Node。
該hole其實是用于接收交換的Node.
該算法解釋分為五部分,
Waiting
Sizing
Hashing
Probing
Padding
此外,該類的作者Doug Lea,還附上了一篇關(guān)于此思想的論文A Scalable Elimination-based Exchange Channel,可免費獲得。
有同學(xué)做了如下圖,比較淺顯易懂。
關(guān)于此圖的解釋請移步至深入淺出 Java Concurrency (26): 并發(fā)容器 part 11 Exchanger
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64115.html
摘要:作用用來交換兩個線程的數(shù)據(jù)。示例運行結(jié)果如下首先,會經(jīng)過三秒后,才輸出結(jié)果,說明兩個線程沒交換之前是阻塞的。 作用 用來交換兩個線程的數(shù)據(jù)。 示例 public class ExchangerDemo { static Exchanger exchanger = new Exchanger(); static class Thread1 extends Thread ...
摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言今天我們講最后一個同步工具類這個比較簡單就是讓兩個線程交換數(shù)據(jù)理論只有兩個方法而已而且兩個還是一樣的只是參數(shù)不通而已跟另外一個線程交換數(shù)據(jù)如果另外一個線程的數(shù)據(jù)準(zhǔn)備好那么 本人郵箱: 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kcogithub: https://github...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計模式,設(shè)計了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...
摘要:倒計時鎖,線程中調(diào)用使進程進入阻塞狀態(tài),當(dāng)達成指定次數(shù)后通過繼續(xù)執(zhí)行每個線程中剩余的內(nèi)容。實現(xiàn)分階段的的功能測試代碼拿客網(wǎng)站群三產(chǎn)創(chuàng)建于年月日。 同步器 為每種特定的同步問題提供了解決方案 Semaphore Semaphore【信號標(biāo);旗語】,通過計數(shù)器控制對共享資源的訪問。 測試類: package concurrent; import concurrent.th...
摘要:對象改變條件對象當(dāng)前線程要等待線程終止之后才能從返回。如果線程在上的操作中被中斷,通道會被關(guān)閉,線程的中斷狀態(tài)會被設(shè)置,并得到一個。清除線程的中斷狀態(tài)。非公平性鎖雖然可能造成饑餓,但極少的線程切換,保證其更大的吞吐量。 聲明:Java并發(fā)的內(nèi)容是自己閱讀《Java并發(fā)編程實戰(zhàn)》和《Java并發(fā)編程的藝術(shù)》整理來的。 showImg(https://segmentfault.com/im...
閱讀 1250·2021-11-15 11:37
閱讀 2260·2021-09-30 09:55
閱讀 4534·2021-09-22 15:51
閱讀 3757·2021-09-22 15:46
閱讀 2781·2019-08-30 15:52
閱讀 436·2019-08-29 16:20
閱讀 2902·2019-08-29 15:12
閱讀 1158·2019-08-26 18:27