ArrayList add源码
/**
* Appends the specified element to the end of this list.
*
* @param e element to be appended to this list
* @return <tt>true</tt> (as specified by {@link Collection#add})
*/
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
1.当需要扩容时,扩容还未完成,其他线程并发调用add时会出现elementData数组越界。
2.设置值的操作不是原子操作,会出现元素覆盖。