问题1:会出现插入的数据不准确问题,数据小于期望数据20000
问题2:出现数组下标溢出异常
具体原因如下:
从ArrayList的源码中看,当没有规定初始化容量的时候,默认的额容量是10,当数据量大于容量的时候就需要进行扩容,这个时候,就出现问题了,我们来看看他的add方法
从这个方法中,看出,当插入数据的时候会先判断,容量的大小(elementData[size++] = e),如果不够就会进行扩容,假如当两个线程并行到达这个elementData[size++] = e判断容量的位置时,
线程1发现容量够,不用扩容,线程2也是,这个时候先进行插入了,但是集合这个时候就满了,线程2并不知道这个事情,因为再前面他就已经判断过了,容量是够的,所以他也就直接插入,这个时候就报Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 6246了