Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa fail-fast và fail safe trong Java


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)