ArrayList 是线程不安全的;
如果一个线程在读取,一边线程在修改,就会抛异常(ConcurrentModificationExceprion),这就是fail-fast策略。
fail-fast策略:是通过modCount实现的
modCount:是volatile,保证线程间修改的可见性
在ArrayList 中foreach
- ArrayList的remove()方法是会调用fastRemovede
- fastRemove方法里会modCount++
- 每次foreach,会调用checkForComodification()方法
- 在其中modCount和expectedModCount不一致,抛异常(ConcurrentModificationExceprion)