Fail-Fast system vs Fail-Safe system

Fail-Fast Iterators

구현 원리

// java.util.ArrayList
protected transient int modCount = 0; // 내부적으로 가지고 있는 변수

...

public boolean add(E e) { // 추가 시
    modCount++; // modCount 증가 
    add(e, elementData, size);
    return true;
}

...

private void fastRemove(Object[] es, int i) { // 삭제 시 최종 호출되는 함수
    modCount++; // modCount 증가
    final int newSize;
    if ((newSize = size - 1) > i)
        System.arraycopy(es, i + 1, es, i, newSize - i);
    es[size = newSize] = null;
}
public class FailSafeTest {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(30);
        numbers.add(40);

        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() == 30) {
                iterator.remove(); // ok!
            }
        }

        for (Integer number : numbers) {
            System.out.println("number = " + number); // 10, 40
        }
    }
}

Fail-Safe Iterator