个人理解
首先这两个名词对应着两种概念,迅速失败和安全失败。
很懵对不对,根本不知道上下文,那么我来讲解下我的认知。
这两个概念的上下文是java的集合,集合可以按照是否支持并发这个维度进行分类。
不支持并发的集合,如HashMap等,就会在疑似并发的情况下中立刻&迅速抛出异常,提醒你,当前集合是一个不支持并发的集合。
判断并发的条件是,在创建迭代器后,集合的遍历过程中,出现了结构改变,例如删除和增加,那么就会fail-fast并抛出异常,提示你不要在疑似并发的情况下使用不支持并发的集合类。
支持并发的集合,如HashTable,会在迭代器创建时,copy当前集合内容,让迭代器在复制的集合中遍历,这样做,即使有其他线程对集合进行了结构变更,也不会影响当前线程中迭代器的遍历,这就是fail-safe(其实笔者不是很理解为什么要命名为fail,哪里fail了?经过思考后,认为是将“没有遍历到其他线程的更改”这种情况,当做了fail,即使fail了,也不影响当前线程的遍历,所以是safe的。)
参考
fail-fast与fail-safe在Java集合中的应用
谈谈fail-fast与fail-safe是什么以及工作机制
网友评论