併發LinkedHashSet
LinkedHashSet 是一個也可以保持有序的集合。為了使這個執行緒安全,我們可以用 Collections.synchronizedSet() 包裝它。然而,這不是一個好的選擇,因為迭代仍然會很快失敗。我們不能迭代的執行緒安全的 LinkedHashSet 有什麼意義呢?
在本期通訊中,我們嘗試建立一個行為類似於 LinkedHashSet 的併發集合,但具有最少的鎖定和弱一致性迭代。
// Maven: eu.javaspecialists.books.dynamicproxies:core:2.0.0 import eu.javaspecialists.books.dynamicproxies.*; import java.util.*; public class DynamicProxiesDemo { public static void main(String... args) { Set<String> angrySet = Proxies.castProxy( Set.class, (p, m, a) -> { throw new UnsupportedOperationException( m.getName() + "() not implemented"); } ); Set<String> set = Proxies.adapt( Set.class, // target interface angrySet, // adaptee new ConcurrentLinkedReducedHashSet<>() // adapter ); set.add("hello"); set.add("world"); Iterator<String> it = set.iterator(); set.add("Goodbye"); while (it.hasNext()) { String next = it.next(); System.out.println(next); } set.clear(); set.addAll(List.of("one")); // UnsupportedOperationException } } 這 |
詳細點選標題見原文
banq:建議使用chronicle queue或disruptor:前者使用磁碟檔案作為兩個執行緒共享,後者使用記憶體環形作為兩個執行緒共享
相關文章
- LinkedHashSet_重複號碼
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- HashSet vs. TreeSet vs. LinkedHashSet
- HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別HashMap
- Java類集框架 —— HashSet、LinkedHashSet原始碼分析Java框架原始碼
- java基礎:HashSet/LinkedHashSet/TreeSet — 原始碼分析Java原始碼
- Java併發---併發理論Java
- 併發-1-併發模型模型
- Guava併發:使用Monitor控制併發Guava
- 併發數、併發以及高併發分別是什麼意思?
- 併發
- 併發容器與框架——併發容器(二)框架
- Go 併發程式設計 - 併發安全(二)Go程式設計
- 「Golang成長之路」併發之併發模式Golang模式
- 併發技術1:CSP併發理論
- [分散式][高併發]高併發架構分散式架構
- js 併發JS
- [Java併發]Java
- 併發控制
- 併發-AQSAQS
- golang併發Golang
- 併發框架框架
- 「Golang成長之路」併發之併發模式篇Golang模式
- 第09章 Go語言併發,Golang併發Golang
- 併發程式設計之:JUC併發控制工具程式設計
- Java併發程式設計-鎖及併發容器Java程式設計
- Java併發(9)- 從同步容器到併發容器Java
- 併發程式設計(二)——併發類容器ConcurrentMap程式設計
- Go高效併發 11 | 併發模式:Go 語言中即學即用的高效併發模式Go模式
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- Java併發指南14:Java併發容器ConcurrentSkipListMap與CopyOnWriteArrayListJava
- java多執行緒與併發 - 併發工具類Java執行緒
- 搞懂 HashSet & LinkedHashSet 原始碼以及集合常見面試題目原始碼面試題
- 併發工具類
- ExecutorService 併發指南
- 限制併發數
- 建立併發包
- [Java併發]ReentrantLockJavaReentrantLock