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)