摘要:使用一個交換兩個線程的數據,交換期間該會被鎖住,一般用于通信領域。當雙方完成交換后,交換的就為的返回值。必須指定返回值的,否則該生產者生產的將不會與消費者的空進行交換。
Exchanger 使用一個pipeline交換兩個線程的數據,交換期間該Slot會被鎖住,一般用于通信領域。
該類提供兩個方法
// k為交換對象
exchange(V k)
//指定超時時間
exchange(V k, int timeOut, TimeUnit unit)
使用時,除了參數k必須外,返回值也必須使用k接收,否則會出現接收不到的數據的情況,如:
//生產者線程 ProductBean bean= new ProductBean() // 設置Product屬性 bean.set().... // 生產完成,開始與消費者交換 bean = Exchanger實例名.exchange(bean) // 消費者線程 ProductBean bean = new ProductBean(); bean = Exchanger實例名.exchange(bean)
生產者將生產的ProductBean放入pipeline中,等待交換。消費者將空Bean放入pipeline等待交換。不論是生產者還是消費者都必須接收exchange方法的返回值,即將exchange的bean賦值給bean。當雙方完成交換后,交換的bean就為exchange的返回值。
必須指定返回值的bean,否則該生產者生產的bean將不會與消費者的空bean進行交換。
關于該類的最詳細解釋當屬于源碼中的關于算法的注釋,這一部分并沒有顯示在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,還附上了一篇關于此思想的論文A Scalable Elimination-based Exchange Channel,可免費獲得。
有同學做了如下圖,比較淺顯易懂。
關于此圖的解釋請移步至深入淺出 Java Concurrency (26): 并發容器 part 11 Exchanger
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64115.html
摘要:作用用來交換兩個線程的數據。示例運行結果如下首先,會經過三秒后,才輸出結果,說明兩個線程沒交換之前是阻塞的。 作用 用來交換兩個線程的數據。 示例 public class ExchangerDemo { static Exchanger exchanger = new Exchanger(); static class Thread1 extends Thread ...
摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載引言今天我們講最后一個同步工具類這個比較簡單就是讓兩個線程交換數據理論只有兩個方法而已而且兩個還是一樣的只是參數不通而已跟另外一個線程交換數據如果另外一個線程的數據準備好那么 本人郵箱: 歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kcogithub: https://github...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據一系列常見的多線程設計模式,設計了并發包,其中包下提供了一系列基礎的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發于一世流云專欄:https...
摘要:倒計時鎖,線程中調用使進程進入阻塞狀態,當達成指定次數后通過繼續執行每個線程中剩余的內容。實現分階段的的功能測試代碼拿客網站群三產創建于年月日。 同步器 為每種特定的同步問題提供了解決方案 Semaphore Semaphore【信號標;旗語】,通過計數器控制對共享資源的訪問。 測試類: package concurrent; import concurrent.th...
閱讀 1250·2021-11-15 11:37
閱讀 2260·2021-09-30 09:55
閱讀 4539·2021-09-22 15:51
閱讀 3760·2021-09-22 15:46
閱讀 2781·2019-08-30 15:52
閱讀 438·2019-08-29 16:20
閱讀 2903·2019-08-29 15:12
閱讀 1163·2019-08-26 18:27