Sr. Không. | Phím | Không nhanh | Không an toàn |
1 | Ngoại lệ | Bất kỳ thay đổi nào trong bộ sưu tập, chẳng hạn như thêm, xóa và cập nhật bộ sưu tập trong một luồng đang lặp lại bộ sưu tập thì ngoại lệ sửa đổi đồng thời không nhanh ném nhanh. | Bộ sưu tập an toàn không có ngoại lệ. |
2. | Loại bộ sưu tập | ArrayList và bộ sưu tập hashmap là những ví dụ về trình lặp không nhanh | CopyOnWrite và sửa đổi đồng thời là các ví dụ về trình lặp an toàn không thành công |
3. | Hiệu suất và Bộ nhớ | Thay vào đó, nó hoạt động trên bộ sưu tập thực tế. Vì vậy, trình lặp này không yêu cầu thêm bộ nhớ và thời gian | Nó đang làm việc trên bản sao của bộ sưu tập thay vì bộ sưu tập thực tế. Đó là chi phí về thời gian và bộ nhớ |
4. | Sửa đổi | Các trình lặp không cho phép sửa đổi một tập hợp trong khi lặp qua nó. | Trình vòng lặp không an toàn cho phép sửa đổi tập hợp trong khi lặp qua nó. |
Ví dụ về 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);
}
}
}
Đầu ra
IBM :2
Dell:1
Ví dụ về 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);
}
}
}
Đầu ra
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)