基础
new ArrayList 底层是new一个数组,初始数组大小是10
- 超过10, 扩容,原来大小的一半
-
add方法
故障现象
并发时可能出现 java.util.ConcurrentModificationException
故障原因
解决方案
使用Vector
Vector since JDK1.0 ; ArrayList since JDK 1.2 Vector add 方法加上Synchorinzed, 性能比较差
Collections
List<_String> list = Collections._synchronizedList(_Arrays._asList(“a”, “b”, “c”));
CopyOnWriteArrayList 写时复制
List<_String> list2 = new CopyOnWriteArrayList<>()_;
优化建议
CopyOnWriteArrayList源码分析
写时复制—读写分离的思想
往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器的Object[]进行copy, 再复制出一个新的容器Object[] newElements, 然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。 这样做的好处时可以对copyonwrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。