fail-fast 和 fail-safe 的区别
从字面意思来看 fail-fast
是快速失败,fail-safe
是安全失败,这都是集合类对于并发读写时的一种应对机制。
fail-fast
,广泛应用于java.util
下的集合类中,其机制为在使用迭代器遍历的过程中,如果此时集合对象的结构被改变(即插入、删除元素时,modCount
的值发生变化。替换元素的值不会发生改变)后,会抛出ConcurrentModificationException
(并发修改异常)的异常。这是一种不支持并发读写的机制,优点是不会在遍历时额外消耗资源;且保证读到的数据时最新的数据。fail-safe
,广泛应用于java.concurrent
下的集合类中,其机制为在使用迭代器遍历时,会创建一个此时集合的视图来供遍历,而不是在源数据上进行遍历,所以在遍历时如果集合对象的结构被改变,不会抛出异常。这是一种支持并发读写的机制,缺点是每次遍历时都会创建视图,会消耗更多的资源;且很有可能读不到最新的值。