同步容器
可以简单地理解为通过synchronized来实现同步的容器,如果有多个线程调用同步容器的方法,它们将会串行执行。
比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器。
同步容器的弊端
性能问题:由于被 synchronized 修饰的方法,每次只允许一个线程执行,其他试图访问这个方法的线程只能等待。
显然,这种方式比没有使用 synchronized 的容器性能要差。
安全问题:同步容器真的一定安全吗?答案是:未必。同步容器未必真的安全。在做复合操作时,仍然需要加锁来保护。
并发容器:解决了以上同步容器的弊端
1、CopyOnWrite容器:
CopyOnWriteArrayList:线程安全的 ArrayList
CopyOnWriteArraySet:线程安全的 Set,它内部包含了一个 CopyOnWriteArrayList,
因此本质上是由 CopyOnWriteArrayList 实现的。
2、CocurrentMap的实现类:
ConcurrentHashMap:线程安全的 HashMap。采用分段锁实现高效并发。
ConcurrentSkipListMap:线程安全的有序 Map。使用跳表实现高效并发。
3、其他:
ConcurrentSkipListSet:相当于线程安全的 TreeSet。它是有序的 Set。它由 ConcurrentSkipListMap 实现。