fail-safe机制不同于fail-fast,它不会直接访问原集合,而是会先创建一个集合的副本,迭代时操作副本内容,这样即便原集合被修改了也不会影响到当前遍历。不过,这种方式的缺点是,遍历期间集合的修改无法被同步感知。java.util.concurrent包下的许多集合类(如CopyOnWriteArrayList和ConcurrentHashMap)都使用了fail-safe机制。
在Java 中,同步集合返回的迭代器是快速失败的,而并发集合返回的迭代器是fail-safe的。 Fail fast迭代器在实时数据中工作,但在数据修改时变得无效,而Fail fast迭代器始终保持一致。 何时使用快速失败和fail-safe迭代器 当你不担心集合在迭代过程中被修改时,请使用fail-safe迭代器,因为fail-fast迭代器不允许这样做。...
对于线程不安全的类,并发情况下可能会出现fail-fast情况;而线程安全的类,可能出现fail-safe的情况。 一、并发修改 当一个或多个线程正在遍历一个集合Collection的时候(Iterator遍历),而此时另一个线程修改了这个集合的内容(如添加,删除或者修改)。这就是并发修改的情况。
Fail-fast 与 Fail-safe 是 Java 中两种不同的错误处理机制,分别适用于不同的场景。Fail-fast 可以帮助我们尽早发现问题,而 Fail-safe 则可以让我们在迭代过程中修改集合结构而不用担心触发异常。在实际的开发过程中,需要根据具体的需求和场景来选择使用哪种机制。
二:安全失败(fail—safe) 采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。 原理:由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发Concurrent Modification Exception。
fail-fast与fail-safe在Java迭代器中的设计 在Java中,最典型的fail-fast与fail-safe就是关于迭代器的设计。通常情况下,那些线程不安全的集合类产生的迭代器都是fail-fast的,而线程安全的集合类产生的迭代器是fail-safe的。fail-fast的迭代器会在迭代过程中,如果你修改了集合类里的内容,则会抛出ConcurrentModificatio...
主要介绍Java面试题中关于fail-fast和fail-safe的区别。, 视频播放量 201、弹幕量 0、点赞数 3、投硬币枚数 0、收藏人数 7、转发人数 0, 视频作者 天哥不爱学习, 作者简介 工作了10年的后端程序员,Python少儿编程讲师,合作或答疑请加微信lantian6706。,相关视频:京东二
二, fail-safe 安全失败 采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。 所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会抛出ConcurrentModificationException 异常。
Java集合迭代器、Fail-Fast、Fail-Safe机制 Iterator是Java集合中迭代器的顶级接口,在此接口中定义了遍历集合的方法。 注意:Iterable与Iterator不是同一个概念 Iterable是可迭代的意思,实现了该接口就代表这个集合是可以利用迭代器和forEach()方法进行遍历的。
异常处理:Fail - Fast 机制会在发现集合结构被修改时立即抛出ConcurrentModificationException异常;Fail - Safe 机制不会抛出异常,会继续迭代。 性能开销:Fail - Fast 机制的性能开销相对较小,因为它只是简单地检查modCount值;Fail - Safe 机制由于需要复制集合,会消耗更多的内存和时间。 数据一致性:Fail - Fast 机制...