最近在看《实战Java虚拟机》一书,看到有关锁与并发章节时,看到如下一个多线程使用ArrayList的例子:
两个线程t1和t2同时向numberList中添加数据,由于ArrayList是线程不安全的,因此会导致添加的数据有错误,这个我还是能理解的,但是它报的确是如下错误:
我就有点理解不了了,ArrayList不是自动扩容、没有长度限制吗,为什么还会出现数组下标越界这种错误呢?
为了便于分析,我对代码进行了一点点修改:
执行结果为:
有时还会出现null,
带着种种不解,来看ArrayList添加流程:
首先,