同步集合与并发集合

同步集合:可以简单地理解为通过synchronized实现同步的集合。如果有多个线程调用同步集合的方法,它们将会串行执行;

ArrayList、Vector与Stack:
1.Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是,导致Vector效率无法和ArrayList相比;
2.ArrayList和Vector都采用线性存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的1倍;
3.Vector可以设置capacityIncrement,而ArrayList不可以,从字面理解就是capacity容量,increment增加,容量增长参数;
4.ArrayList默认长度10,Vector默认长度10;
5.Stack继承于Vector,是基于动态数组实现的一个线程安全的栈;
6.ArrayList、Vector、Stack共同特点:随机访问速度快,插入和移除性能较差(这是数组的特点,三者的底层均为数组实现)

HashMap与Hashtable:
1.二者的存储结构与解决冲突的方法都是相同的;
2.Hashtable在不指定容量的情况下默认为11,而HashMap为16;Hashtable不要求底层数组的容量一定是2的整数次幂,而HashMap则要求一定为2的整数次幂;
3.Hashtable中的key和value都不允许为null,而HashMap中key和value都允许为null(key只能有一个为null,value可以有多个为null);但是如果在Hashtable中有类似put(null, null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常;
4.Hashtable扩容时,将容量变为原来的2倍+1,而HashMap扩容时,将容量变为原来的2倍;
5.Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值;Hashtable在求hash值对应的位置索引时,用的取模运算,而HashMap在求位置索引时,则用与运算,且这里一般先用hash&0x7FFFFFFF后,再对length计算,目的是将负的hash值转换为正值;
6.HashMap拿掉了Hashtable的contains方法,因为此方法容易引起误解;两个类都包含containsKey和containsValue方法。

Collections:
Collections是为集合提供各种方便操作的工具类,通过它,可以实现集合排序、查找、替换、同步控制、设置不可变集合。
Collections.synchronizedCollection(Collection<T> t)
Collection.synchronizedList(List<T> list)
Collection.synchronizedMap(Map<K, V> map)
Collection.synchronizedSet(Set<T> t)
上面几个方法是Collections工具类将集合变为同步集合,从而解决集合的线程安全问题。

并发集合:jdk5的重要特征,增加了并发包java.util.concurrent.*。
常见的并发集合:
ConcurrentHashMap:线程安全的HashMap实现(ConcurrentHashMap不允许空值或空键,HashMap可以);
CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList;
CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素;
ArrayBlockingQueue:基于数组,先进先出,线程安全,可实现指定时间的阻塞读写,并且容量可以限制;
LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作的情况下,性能优于ArrayBlockingQueue;

CopyOnWrite集合即写时复制的集合:
通俗地理解是,当我们往一个集合添加元素的时候,不直接往当前集合添加,而是先将当前集合进行copy,复制出一个新的集合,然后新的集合里添加元素,添加完之后,再将原集合的引用指向新的集合。这样做的好处是我们可以对CopyOnWrite集合进行并发的读,而不需要加锁,因为当前集合不会添加任何元素。所以CopyOnWrite集合也是一种读写分离的思想,读和写不同的集合。


性能:
同步集合比并发集合慢得多,主要原因是锁,同步集合会对整个Map或List加锁。


猜你喜欢

转载自www.cnblogs.com/yuanfei1110111/p/10300280.html
今日推荐