Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 fail-fast와 fail safe의 차이점


Sr. 아니요. 빠른 실패 고장 ​​안전
1
예외
스레드 동안 컬렉션 추가, 제거 및 업데이트와 같은 컬렉션의 모든 변경 사항은 컬렉션을 반복하고 Fail fast throw 동시 수정 예외입니다.
안전한 컬렉션은 예외를 발생시키지 않습니다.
2.
컬렉션 유형
ArrayList 및 hashmap 컬렉션은 fail-fast iterator의 예입니다.
CopyOnWrite 및 동시 수정은 안전 장치 반복자의 예입니다.
3.
성능 및 메모리
대신 실제 수집 작업입니다. 따라서 이 반복자는 추가 메모리와 시간이 필요하지 않습니다.
실제 컬렉션 대신 컬렉션의 복제본을 작업 중입니다. 시간과 메모리 면에서 오버헤드
4.
수정
반복자는 컬렉션을 반복하는 동안 컬렉션 수정을 허용하지 않습니다.
Fail-Safe 반복자는 컬렉션을 반복하는 동안 컬렉션 수정을 허용합니다.

FailSafe의 예

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //Adding elements to map
      map.put("Dell", 1);
      map.put("IBM", 2);
      //Getting an Iterator from map
      Iterator<String> it = map.keySet().iterator();
      while (it.hasNext()){
      String key = (String) it.next();
         System.out.println(key+" : "+map.get(key));
         map.put("Google", 3);
      }
   }
}

출력

IBM :2
Dell:1

FailSafe의 예

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //Getting an Iterator from list
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

출력

Exception in thread "main" java.util.ConcurrentModificationException
   at java.util.ArrayList$Itr.checkForComodification(Unknown Source)