java中哪些集合是線程安全的,哪些是線程不安全的


目錄
1. 常見集合
2.什么叫“集合是線程不安全的”
3. 線程安全和線程不安全的集合
4. 如何綜合考慮線程不安全和效率低的問題

 



1. 常見集合
這里自己總結了一些比較常見的java集合,對於這些集合的特點和區別后期博客中會進行總結介紹:

2.什么叫“集合是線程不安全的”
首先我們來了解一下什么叫集合是線程不安全的:

當多個並發同時對非線程安全的集合進行增刪改的時候會破壞這些集合的數據完整性;
例如:當多個線程訪問同一個集合或Map時,如果有超過一個線程修改了ArrayList集合,則程序必須手動保證該集合的同步性。

3. 線程安全和線程不安全的集合
Vector、HashTable、Properties是線程安全的;

ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是線程不安全的。

值得注意的是:為了保證集合是線程安全的,相應的效率也比較低;線程不安全的集合效率相對會高一些。

4. 如何綜合考慮線程不安全和效率低的問題
為了保證集合既是安全的而且效率高,Collections為我們提出了解決方案,把這些集合包裝成線程安全的集合。
Collections提供了如下幾個靜態方法。

1 <T> Collection<T> synchronizedCollection(Collection<T> c); //返回指定collection 對應的線程安全的collection。
2 static <T> List<T> synchronizedList(List<T> list); //返回指定List對象對應的線程安全的List 對象。
3 static <K, V> Map<K, V> synchronizedMap(Map<K, V> m); //返回指定Map對象對應的線程安全的Map對象。
4 static <T> Set<T> synchronizedSet(Set<T> s); //返回指定Set對象對應的線程安全的Set對象。
5 static <K, V> SortedMap<K, V> synchronizedSortedMap(SortedMap<K, V> m); //返回指定SortedMap對象對應的線程安全的SortedMap對象。

當然,在實際工作中,公司都會自己封裝一些線程安全且效率高的集合。
————————————————
版權聲明:本文為CSDN博主「城序猿」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43374508/java/article/details/90024426


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM