1、fail-fast
java.util包下的集合类都是fail-fast机制
内部有一个modCount记录修改次数,使用迭代器每一次遍历时都会去校验modCount值
是否有变换,如果变了说明有其它线程对集合做了操作,抛出fail-fast异常。
如:ArrayList,HashMap
2、fail-safe
java.util.concurrent包下的集合类都是fail-safe机制
迭代器基于对原集合的克隆进行遍历,所有对原容器的修改不会影响到遍历。但是会出现
遍历得到的数据不是最新的。hashTable和concurrentHashMap因为此原因不支
持key/value为null,因为无法判断对应的key是不存在还是为空,因为你无法再次
调用contain来对key进行校验是否存在(有可能克隆集合里没有而其它线程将此key放入原集合)