Fail-Fast 방식과 Fail-Safe 방식의 차이점

배세훈·2021년 9월 4일
1

Etc/용어

목록 보기
13/16

Fail-Fast와 Fail-Safe 방식의 차이점

Fail-Fast 방식은 동작중 오류가 발생하면 바로 오류를 알리고 작업을 중단합니다.
Fail-Safe 방식은 동작중 오류가 발생해도 작업을 중단하지 않고 진행합니다.

java에서는 Iterator가 for문을 이용한 순환중 데이터가 변경되었을 때
Fail-Fast 방식이면 java.util.ConcurrentModificationException 오류를 throw 하고
Fail-Safe 방식이면 동작이 계속된다.

Fail-Safe 방식은 ConcurrentHashMap을 이용할 때만 가능하다.

ex)

package com.test.dbtest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

public class test {

    public static void funcFailFast() {
        ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            Integer number = iterator.next();
            numbers.add(50);
            System.out.println(number);
        }
    }

    public static void funcFailSafe() {
        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
        map.put("First", 10);
        map.put("Second", 20);
        map.put("Third", 30);
        map.put("Fourth", 40);
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            map.put(key, 50);
            System.out.println("key: " + key);
        }
    }

    public static void main(String[] args) {
        funcFailFast();
        funcFailSafe();
    }


}
profile
성장형 인간

0개의 댓글