Cách tốt nhất là có thể xem xét nguồn cho mỗi lớp như được triển khai bằng cách thực hiện JDK mở cho mỗi lớp; theo cách đó, bạn có thể nhận được câu trả lời ngay từ miệng ngựa, vì nó là :-)
Điều đó về cơ bản, "không nhanh" theo nghĩa này có nghĩa là một Iterator trên HashMap sẽ ném một ngoại lệ nếu nó phát hiện rằng một luồng khác đã sửa đổi HashMap được nhắm mục tiêu - nếu bạn tìm trong nguồn cho HashMap, bạn sẽ thấy điều này được thực hiện bằng cách chỉ cần kiểm tra một bộ đếm cho số sửa đổi dự kiến. Nếu số lượng sửa đổi khác với Iterator được mong đợi, điều đó có nghĩa là một người khác đã đến kể từ lần kiểm tra cuối cùng và làm rối tung xung quanh với HashMap, và vì vậy Iterator ném một số ConcurrentModificationException.
Iterator "không nhanh" không gặp khó khăn khi kiểm tra, và vui vẻ đi theo kinh doanh của nó trong cấu trúc dữ liệu cơ bản. Vì vậy, bạn có được một số tính linh hoạt (có thể là sự linh hoạt đáng ngờ trong trường hợp này) để đổi lấy việc có thể chạy vào các lỗi sau này; tức là cố truy cập một giá trị không còn tồn tại nữa.
Giống như tất cả các chiến lược fail-fast, ý tưởng là lỗi trước đó được phát hiện, việc khôi phục hoặc gỡ lỗi trở nên dễ dàng hơn.
Nguồn
2012-01-05 22:57:00
Các iterator của Hastable là không nhanh. Enumerations của nó không. –
Bạn đã đúng! Cảm ơn! – evanwong