CopyOnWriteArrayList

Các thao tác add , set , remove trên một bộ sưu tập nhất định dẫn đến một bản sao mới của mảng bên trong được tạo. Điều này đảm bảo rằng chúng tôi không bắt gặp ConcurrentModificationException .

Chỉ cần nhớ rằng khi sao chép một mảng, chỉ các tham chiếu đến các đối tượng được sao chép, bao gồm quyền truy cập vào các trường của các phần tử không an toàn cho luồng. Các bộ sưu tập như vậy được sử dụng tốt nhất trong các trường hợp có số lượng thao tác ghi tối thiểu.

CopyOnWriteArrayList<E> là một dạng tương tự an toàn theo luồng của ArrayList , được triển khai trên cơ sở thuật toán CopyOnWrite. Các phương thức và hàm tạo bổ sung được mô tả bên dưới:

CopyOnWriteArrayList(E[] toCopyIn) Một hàm tạo lấy một mảng làm đầu vào.
int indexOf(E e, int chỉ số) Trả về chỉ mục của phần tử đầu tiên được tìm thấy, bắt đầu từ chỉ mục đã cho.
int lastIndexOf(E e, int chỉ mục) Trả về chỉ mục của phần tử đầu tiên được tìm thấy trong tìm kiếm ngược lại, bắt đầu từ chỉ mục đã cho.
boolean addIfAbsent(E e) Thêm một phần tử nếu nó không có trong bộ sưu tập. Phương thức bằng được sử dụng để so sánh các phần tử .
int addAllAbsent(Bộ sưu tập <? kéo dài E> c) Thêm phần tử nếu chúng không có trong bộ sưu tập. Trả về số phần tử được thêm vào.

Giao diện ConcurrentMap

Cải thiện việc triển khai HashMapTreeMap với sự hỗ trợ cho đa luồng và khả năng mở rộng.

ConcurrentMap<K, V> là một giao diện mở rộng Bản đồ với các hoạt động nguyên tử bổ sung.

V putIfAbsent(K khóa, giá trị V) Chỉ thêm một cặp khóa-giá trị mới nếu khóa không có trong bộ sưu tập. Trả về giá trị trước đó cho khóa đã cho.
boolean remove(Khóa đối tượng, Giá trị đối tượng) Chỉ xóa cặp khóa-giá trị nếu khóa đã cho khớp với giá trị đã cho trong Bản đồ. Trả về true nếu phần tử được xóa thành công.
boolean thay thế (khóa K, V oldValue, V newValue) Chỉ thay thế giá trị cũ bằng giá trị mới theo khóa nếu giá trị cũ khớp với giá trị đã cho trong Bản đồ. Trả về true nếu giá trị đã được thay thế bằng giá trị mới.
Thay thế V (phím K, giá trị V) Thay thế một giá trị cũ bằng một giá trị mới theo khóa chỉ khi khóa được liên kết với bất kỳ giá trị nào. Trả về giá trị trước đó cho khóa đã cho.

ConcurrentHashMap<K, V> - ở đây dữ liệu được trình bày dưới dạng các phân đoạn, được chia thành các hàm băm chính. Do đó, nếu bạn cần quyền truy cập, thì phân đoạn đó bị khóa chứ không phải đối tượng. Các trình lặp không ném ConcurrentModificationException và biểu thị dữ liệu trong một khoảng thời gian cụ thể.

Triển khai ConcurrentHashMap

ConcurrentHashMap<K, V> - ở đây dữ liệu được trình bày dưới dạng các phân đoạn, được chia nhỏ theo các hàm băm chính. Do đó, quyền truy cập dữ liệu bị khóa theo phân đoạn chứ không phải bởi một đối tượng. Ngoài ra, các trình lặp đại diện cho dữ liệu trong một khoảng thời gian cụ thể và không ném ConcurrentModificationException .

ConcurrentNavigableMap<K,V> - mở rộng giao diện NavigableMap và trả về một ConcurrentNavigableMap . Tất cả các trình vòng lặp đều an toàn để sử dụng và không ném ConcurrentModificationException .

ConcurrentSkipListMap<K, V> là một dạng tương tự của TreeMap cho đa luồng. Dữ liệu được sắp xếp theo khóa và hiệu suất nhật ký trung bình (N) được đảm bảo cho các hoạt độngchứaKey,get,put,removevà các hoạt động tương tự khác.

ConcurrentSkipListSet<E> là một triển khai của giao diện Set dựa trên ConcurrentSkipListMap .