fail-fast机制:集合遍历过程中发生了增删改,则会抛出Concurrent Modification Exception异常。
实现原理:遍历过程中会使用一个modCount变量,设置一个初值,集合遍历期间内容发生变化这个变量就会改变,当遍历下一个元素时会判断这个变量是否改变,如果改变则会抛出异常,如果修改的值和原来的值相等则不会抛出异常。Java.util包下的集合类均是快速失败,不允许多线程下进行修改。
fail-safe机制:遍历前copy原集合,遍历是在copy的上面进行的,所以原集合改变不会被监测到,就不会抛出异常,Java.util.concurrent包下的容器都是安全失败,允许在多线程下并发使用。