快速失败(fail-fast)和安全失败(fail-safe)的区别

it2025-04-18  4

快速失败(fail-fast)和安全失败(fail-safe)的区别

fail-fast和fail-safe比较

使用遍历器我们可以遍历整个集合,遍历器分为两种,一种是fail-fast,一种是fail-safe。

fail-fast(快速失败)类的迭代器在遍历容器的过程中,如果容器发生改变,就会抛出ConcurrentModificationException异常。

fail-safe(安全失败)类的迭代器在遍历容器的过程中,即使容器发生改变,也不会抛出异常。

java.util包下面的集合类的迭代器都是fail-fast(快速失败)的。例如,下面的这段代码,就会抛出ConcurrentModificationException异常。

ArrayList<Integer> integers = new ArrayList<>(); integers.add(1); integers.add(2); integers.add(3); Iterator<Integer> itr = integers.iterator(); while (itr.hasNext()) { Integer a = itr.next(); integers.remove(a); }

java.util.concurrent包下面的集合类的迭代器都是fail-safe(安全失败)的。例如,下面的这段代码,即使在遍历中改变容器也不会抛出异常。

ArrayList<Integer> integers = new CopyOnWriteArrayList<>(); integers.add(1); integers.add(2); integers.add(3); Iterator<Integer> itr = integers.iterator(); while (itr.hasNext()) { Integer a = itr.next(); integers.remove(a); }

趣事

也许,这就是程序员的终极追求~

最新回复(0)