Java併發-執行緒安全的集合類
注意,此處所提供的程式碼,都是基於JDK1.8版本,部分程式碼與之前版本存在較大差異
1、Hashtable:通過synchronized關鍵字保證執行緒安全
2、ConcurrentHashMap:效率比Hashtable高,主要體現在前者使用了鎖分離技術,即程式碼塊鎖,而不是方法鎖
保證執行緒安全的方法(JDK1.8中):在ConcurrentHashMap中,隨處可以看到U, 大量使用了U.compareAndSwapXXX的方法,這個方法是利用一個CAS演算法實現無鎖化的修改值的操作,他可以大大降低鎖代理的效能消耗。這個演算法的基本思想就是不斷地去比較當前記憶體中的變數值與你指定的一個變數值是否相等,如果相等,則接受你指定的修改的值,否則拒絕你的操作。因為當前執行緒中的值已經不是最新的值,你的修改很可能會覆蓋掉其他執行緒修改的結果。這一點與樂觀鎖,SVN的思想是比較類似的。
3、CopyOnWriteArrayList:實現原理比較簡單,就是利用之前寫過的Java中的鎖ReentrantLock進行加鎖處理,寫操作進行加鎖處理,讀操作則是利用複製容器的方式
4、CopyOnWriteArraySet:CopyOnWriteArrayList的裝飾器模式
CopyOnWrite容器,即寫時複製的容器,通俗理解就是當我們往一個容器中新增元素的時候,不直接往當前容器中新增,而是先將當前容器進行copy,複製出一個新的容器,然後新的容器裡面新增元素,新增完元素之後,再將原容器的引用指向新的容器,這樣做的好處是我們可以對CopyOnWrite容器進行併發的讀,而不需要加鎖,因為當前容器不會新增任何元素,但是新增元素的時候需要加鎖,防止多個併發執行緒搞出多個複製容器來
所以CopyOnWrite容器比較多用於讀多寫少的併發場景,比如白名單,黑名單,商品類目的訪問和更新等場景,
CopyOnWrite的注意:
1、減少擴容開銷
2、儘可能使用批量新增
CopyOnWrite的缺點:
1、記憶體佔用,複製容器的時候同時存在兩個容器,而且寫完之後,由於垃圾處理機制的原因,原容器可能還會留存一段時間
2、資料一致性問題,只能保證資料的最終一致性,不能保證資料的實時一致性
5、Vector 向量佇列,實現了List,通過synchronized關鍵字保證執行緒安全,跟Hashtable類似
6、StringBuffer和StringBuilder中,Stringbuffer是執行緒安全的,通過synchronized關鍵字保證執行緒安全。
最後複製貼上一些關於CAS的文章連結,感覺說的挺好的
https://blog.csdn.net/hsuxu/article/details/9467651
相關文章
- Java執行緒安全的集合類:Map、List、SetJava執行緒
- Java執行緒的併發工具類Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- java中執行緒安全的集合Java執行緒
- java多執行緒與併發 - 併發工具類Java執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- java各種集合的執行緒安全Java執行緒
- Java併發專題(二)執行緒安全Java執行緒
- 執行緒併發執行緒安全介紹及java.util.concurrent包下類介紹執行緒Java
- Java併發程式設計之執行緒安全、執行緒通訊Java程式設計執行緒
- Java併發(十七)----變數的執行緒安全分析Java變數執行緒
- 【JAVA併發第四篇】執行緒安全Java執行緒
- JAVA 併發之路 (二) 執行緒安全性Java執行緒
- JAVA多執行緒併發Java執行緒
- java併發與執行緒Java執行緒
- 併發程式設計之多執行緒執行緒安全程式設計執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- Java併發(四)----執行緒執行原理Java執行緒
- 10、Java併發性和多執行緒-執行緒安全與不可變性Java執行緒
- [Java併發]執行緒的並行等待Java執行緒並行
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- 【重學Java】多執行緒進階(執行緒池、原子性、併發工具類)Java執行緒
- Java併發系列 — 執行緒池Java執行緒
- java 多執行緒 併發 面試Java執行緒面試
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒
- Java 併發:執行緒、執行緒池和執行器全面教程Java執行緒
- .Net 執行緒安全集合執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- Java多執行緒/併發08、中斷執行緒 interrupt()Java執行緒
- Java併發程式設計:Java執行緒Java程式設計執行緒
- Java執行緒新特徵——Java併發庫Java執行緒特徵
- 併發工具類(三)控制併發執行緒的數量 Semphore執行緒
- java多執行緒10:併發工具類CountDownLatch、CyclicBarrier和SemaphoreJava執行緒CountDownLatch
- 啃碎併發(五):Java執行緒安全特性與問題Java執行緒
- 一篇文章看懂Java併發和執行緒安全Java執行緒
- Java多執行緒之併發安全經典案例-賣票Java執行緒
- Java併發——執行緒池ThreadPoolExecutorJava執行緒thread