1.集合类不安全之并发修改异常之list:
1)如果直接new一个ArrayList的话,它的长度默认为10.
2)如果超过10,就会扩容原空间的一半。
会出现:java.util.concurrentModificationException(并发修改异常)
处理问题的四步骤:
(1)故障现象:
主要是出现了什么样的的异常。
(2)导致原因:
并发修改异常导致的是哪些问题。
(3)解决方案:
使用Vector()但是并发能力有问题。
使用Collections.sunchronizedList();
使用CopyOnWriteArrayList();(写时复制:读写分离的思想)
(4)优化建议。
写时复制:
CopyOnWrite容器即写时复制的容器。往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器object[]进行copy,复制出一个新的容器Object[]newElements,然后新的容器Object[]newElements里添加元素,添加完元素之后,再将源容器的引用指向新的容器setArray(newElement);这样做的好处是可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。
2.集合类不安全之set:
HashSet底层就是HashMap()初始值是16,负载因子是0.75HashSet是因为底层关注的是key,value是一个类型为Object的常量。所以HashSet()只添加一个值。解决方案和List是一样的。new Vector();通过Collections.synchronizedSet();CopyOnWriteSet.
3.集合类不安全之Map:
解决方案:1)new Vector(); 2)Collections.synchronizedMap(); 3)CurrentHashMap();