English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
순번 | 키 | 불합격 | 故障安全 |
---|---|---|---|
1 | 예외 | 셋 내의 어떤 변경도(예를 들어, 스레드 동안 셋에 추가, 제거 및 업데이트)는 이터레이션된 셋을 변경한 후, 빠르게 동기화된 변경을 실패로 만드는 이터레이션을 수행합니다. | 故障安全 셋은 예외를 발생시키지 않습니다. |
2。 | 셋 타입 | ArrayList와 hashmap 셋은 빠른 실패 이터레이터의 예입니다 | CopyOnWrite와 동기화된 수정은 故障安全 이터레이터의 예입니다 |
3。 | 성능과 기억 | 이터레이터는 실제 셋에서 작업합니다. 따라서 이터레이터는 추가적인 메모리와 시간이 필요하지 않습니다. | 그는 실제 셋이 아니라 셋의克隆을 처리하고 있습니다. 시간과 메모리 비용 |
4。 | 수정 항목 | 이터레이터는 셋을 이터레이션하는 동안 셋을 수정하지 않도록 합니다. | 구조 보호 이터레이터는 셋을 이터레이션하는 동안对其进行 수정할 수 있습니다. |
public class FailSafeExample{ public static void main(String[] args){ ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>(); //맵에 요소 추가 map.put("Dell", 1); map.put("IBM", 2); //맵에서 이터레이터 가져오기 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
public class FailFastExample{ public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); //리스트에서 이터레이터 가져오기 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)