1. 程式人生 > >基礎知識總結:執行緒安全的集合與執行緒不安全的集合

基礎知識總結:執行緒安全的集合與執行緒不安全的集合

集合大概有4種類型:List   Set   Queue  Map

其中Vector、HashTable、Properties是執行緒安全的。其中ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是執行緒不安全的。(執行緒不安全是指:當多個執行緒訪問同一個集合或Map時,如果有超過一個執行緒修改了ArrayList集合,則程式必須手動保證該集合的同步性。)

當多個併發同時對非執行緒安全的集合進行增刪改的時候會破壞這些集合的資料完整性

Collections提供的類方法把這些集合包裝成執行緒安全的集合。Collections提供瞭如下幾個靜態方法。
  • <T> Collection<T> synchronizedCollection(Collection<T> c): 返回指定collection 對應的執行緒安全的collection。
  • static <T> List<T> synchronizedList(List<T> list): 返回指定List物件對應的執行緒安全的List 物件。
  • static <K, V> Map<K, V> synchronizedMap(Map<K, V> m): 返回指定Map物件對應的執行緒安全的Map物件。
  • static <T> Set<T> synchronizedSet(Set<T> s): 返回指定Set物件對應的執行緒安全的Set物件。
  • static <K, V> SortedMap<K, V> synchronizedSortedMap(SortedMap<K, V> m): 返回指定SortedMap物件對應的執行緒安全的SortedMap物件。
  • static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s): 返回指定SortedSet物件對應的執行緒安全的SortedSet物件。
另外java.util.concurrent 包下提供了大量支援高效併發訪問的集合介面和實現類:
  • 以Concurrent 開頭的集合類,如ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue 和 ConcurrentLinkedDeque。
  • 以CopyOnWrite 開頭的集合類,如CopyOnWriteArrayList、CopyOnWriteArraySet。