16.9.2 包装线程不安全的集合
16.9.2 包装线程不安全的集合
前面介绍Java集合时所讲的ArrayList、Linkedlist、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的,也就是说,当多个并发线程向这些集合中存、取元素时,就可能会破坏这些集合的数据完整性。
Collections的synchronizedXxx方法
如果程序中有多个线程可能访问以上这些集合,就可以使用Collections提供的类方法把这些集合包装成线程安全的集合。Collections提供了如下几个静态方法。
| 方法 | 描述 |
|---|---|
static <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对象 |
代码 使用线程安全的HashMap
例如需要在多线程中使用线程安全的HashMap对象,则可以采用如下代码:
1 | //使用Collectionss的synchronizedMap方法将一个普通的HashMap包装成线程安全的类 |
创建后就包装
如果需要把某个集合包装成线程安全的集合,则应该在创建之后立即包装