Nền nhanh Tôi có một bản đồ đồng thời tôi đã sử dụng để lưu trữ một số giá trị thay đổi khá thường xuyên (vẫn đáng lưu bộ nhớ đệm từ thử nghiệm). Tôi muốn loại bỏ các mục khỏi bộ nhớ cache của tôi trong khoảng thời gian đều đặn bằng cách kiểm tra thời gian hết hạn trong giá trị. Tôi đang sử dụng phương thức keySet() để có được một tham chiếu đến tất cả các phím của tôi và sau đó kiểm tra các giá trị và nếu hết hạn tôi loại bỏ chúng. Trong các chủ đề khác bộ nhớ cache đang được truy vấn và cập nhật (loại bỏ) liên tục.Java ConcurentMap keySet() khi bản đồ được sửa đổi và lặp qua khóa phím
Từ javadocs cho keySet() nó đề cập nếu bản đồ thay đổi trong khi tôi đang lặp qua bộ khóa Đặt kết quả là không xác định. Rõ ràng tôi muốn một cách xác định để đối phó với điều này để kết quả là hợp lệ. Nó sẽ là đủ để vượt qua Set để một HashSet và sau đó iterate trên tập này vì nó là sự hiểu biết của tôi bộ này sẽ không được hỗ trợ bởi bản đồ, đây là một lãng phí của bộ nhớ cách làm việc đó? Bất kỳ ý tưởng đánh giá cao.
Thật không may, người khởi xướng của tôi không phải là cách duy nhất để xóa các mục khỏi bản đồ đồng thời, vì vậy tôi phải sao chép keySet sang một Set khác trước khi lặp qua nó.
Cảm ơn trước
EDIT: Hóa ra tôi đã đọc javadocs đối với phương pháp Bản đồ keySet() thay vì các ConcurrentMap keySet(). Cảm ơn của tôi xấu :)
Trả lại chế độ xem các phím chứa trong bản đồ này. Bộ này là được bản đồ sao lưu, do đó các thay đổi đối với bản đồ được phản ánh trong bộ này và ngược lại. Nếu bản đồ được sửa đổi trong khi lặp lại tập hợp là trong tiến trình (ngoại trừ thông qua hoạt động xóa riêng của trình lặp của ), thì kết quả của lần lặp lại là không xác định. Bộ này hỗ trợ loại bỏ phần tử , loại bỏ các bản đồ tương ứng từ bản đồ, qua Iterator.remove, Set.remove, removeAll retainAll, và xóa hoạt động . Nó không hỗ trợ các hoạt động thêm hoặc thêmTất cả các hoạt động.
lớn Cảm ơn Brian ngươi tôi sử dụng một hashmap đồng thời nhưng khi nhìn vào javadocs đã đọc các tài liệu cho bản đồ :) Cảm ơn một triệu –