ซีเนียร์ เลขที่ | คีย์ | ล้มเหลว-เร็ว | Fail-Safe |
1 | ข้อยกเว้น | การเปลี่ยนแปลงใดๆ ในคอลเล็กชัน เช่น การเพิ่ม การลบ และการอัปเดตคอลเล็กชันระหว่างเธรดเป็นการวนซ้ำคอลเล็กชัน จากนั้น Fail fast throw ข้อยกเว้นการแก้ไขพร้อมกัน | คอลเลกชันที่ป้องกันความผิดพลาดนั้นไม่มีข้อยกเว้น |
2. | ประเภทของคอลเลกชัน | ArrayList และคอลเล็กชัน hashmap เป็นตัวอย่างของตัววนซ้ำที่ล้มเหลวอย่างรวดเร็ว | 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)