Sự khác biệt giữa ConcurrentHashMap và Hashtable trong Java là gì?ConcurrentHashMap và Hashtable trong Java
Ứng dụng nào hiệu quả hơn cho các ứng dụng được tạo luồng?
Sự khác biệt giữa ConcurrentHashMap và Hashtable trong Java là gì?ConcurrentHashMap và Hashtable trong Java
Ứng dụng nào hiệu quả hơn cho các ứng dụng được tạo luồng?
ConcurrentHashMap
sử dụng nhiều nhóm để lưu trữ dữ liệu. Điều này tránh đọc khóa và cải thiện đáng kể hiệu suất trên HashTable
. Cả hai đều là chủ đề an toàn, nhưng có hiệu suất rõ ràng thắng với ConcurrentHashMap
.
Khi bạn đọc từ ConcurrentHashMap
sử dụng get()
, không có khóa, trái với HashTable
mà tất cả các thao tác đều được đồng bộ hóa đơn giản. HashTable
được phát hành trong phiên bản cũ của Java trong khi ConcurrentHashMap
là một điều 5+ java.
HashMap
là cách tốt nhất để sử dụng trong một ứng dụng đơn luồng.
Ngoài ra còn có 'ConcurrentHashMap.putIfAbsent()' không có giá trị tương đương trong phiên bản cũ ' Hashtable'. Và khi bạn chỉ đọc từ một 'ConcurrentHashMap', không có khóa, trái với' Hashtable' mà tất cả các hoạt động được đồng bộ hóa đơn giản. –
@FrankPavageau đã thêm nhận xét rất hữu ích của bạn vào câu trả lời Gốc. – Algorithmist
ConcurrentHashMap và cơ chế khóa Hashtable
Hashtable
là thuộc khuôn khổ Bộ sưu tập; ConcurrentHashMap
thuộc về khuôn khổ Executor.Hashtable
sử dụng khóa đơn cho toàn bộ dữ liệu. ConcurrentHashMap
sử dụng nhiều khóa trên cấp phân đoạn (16 theo mặc định) thay vì cấp đối tượng tức là toàn bộ Map
.ConcurrentHashMap
khóa chỉ được áp dụng cho các bản cập nhật. Trong trường hợp retrievals, nó cho phép đồng thời đầy đủ, retrievals phản ánh kết quả của các hoạt động cập nhật gần đây hoàn thành. Vì vậy, đọc có thể xảy ra rất nhanh trong khi viết được thực hiện với một khóa.ConcurrentHashMap
không ném ConcurrentModificationException
nếu một chủ đề cố sửa đổi trong khi một chuỗi đang lặp qua nó và không cho phép giá trị null.ConcurrentHashMap
trả về Iterator
, không an toàn (tức là trình lặp sẽ tạo bản sao của cấu trúc dữ liệu nội bộ) về sửa đổi đồng thời.ConcurrentHashMap
sử dụng một logic mảnh cơ sở dữ liệu (Segment<K, V>[] segments
) được biết đến như Concurrency cấp, tức là chia dữ liệu thành những mảnh (đoạn) hơn đặt ổ khóa trên mỗi phân đoạn (segment) thay vì đặt một khóa duy nhất cho toàn bộ dữ liệu (Map
). Giá trị mặc định là 16.Để hiểu được ConcurrentHashMap kỹ thuật chi tiết xin xem xét điều này link
Sự giống nhau sau đây sẽ giúp bạn có được hiểu khái niệm chỉ (không lôgic)
Hashtable
và ConcurrentHashMap
là hai loại Nhà.Hashtable
khóa cửa chính của ngôi nhà.ConcurrentHashMap
khóa cửa phòng cụ thể thay vì cửa chính.Ứng dụng nào hiệu quả hơn cho các ứng dụng luồng?
ConcurrentHashMap
hiệu quả hơn cho các ứng dụng được tạo chuỗi.
Có thể điều này sẽ giúp http://www.codercorp.com/blog/java/why-concurrenthashmap-is-better-than-hashtable-and-just-as-good-hashmap.html – kosa
Đối với một người không phải là luồng ứng dụng, sử dụng 'HashMap'. –
Ngoài ra, hãy xem http://stackoverflow.com/a/40878/632951 để biết thêm thông tin. – Pacerier