Tôi cần một bản đồ với các yêu cầu sau:Bản đồ đồng thời với kích thước cố định
Nó nên được đánh giá cao đồng thời. Các phương thức
put()
,get()
vàremove()
có thể được gọi bởi nhiều luồng cùng một lúc.Nó phải có kích thước cố định. Nếu kích thước của
HashMap
đạt đến giá trị tối đa (ví dụ: 10000), thì không được phép thêm mục nhập mới vào bản đồ. KHÔNG THỂ là bộ nhớ cache LRU nơi mục nhập cũ nhất bị xóa khi đạt đến kích thước tối đa.
ConcurrentHashMap
có thể đáp ứng # 1. Nhưng, không chắc làm thế nào # 2 có thể được thực hiện trên đầu trang của ConcurrentHashMap
mà không ảnh hưởng đến sự tương tranh (Thêm một phương thức tùy chỉnh put()
sẽ thêm vào bản đồ chỉ khi kích thước nhỏ hơn kích thước tối đa, cần phải được "đồng bộ". mục đích sử dụng đồng thời HashMap
).
Vui lòng cho tôi biết suy nghĩ của bạn.
kiểm tra kích thước trước khi đặt? – vefthym
trong concurrenthashmap kích thước được báo cáo là không chính xác. có thể sử dụng concurrenthashmap với một semaphore đếm? –
"không chắc chắn làm thế nào # 2 có thể được thực hiện trên đầu trang của ConcurrentHashMap mà không ảnh hưởng đến đồng thời" ... Tôi không thấy lý do tại sao nó sẽ là một vấn đề. Bạn tạo ra một wrapper rằng, trên cùng của bản đồ đồng thời giới thiệu truy cập. Để đồng bộ hóa quyền truy cập vào bộ đếm, bạn sử dụng nguyên gốc syncronizing của riêng mình (ví dụ: ReentrantLock) để giảm thiểu chi phí bổ sung và tách nó khỏi đồng bộ hóa bản đồ đồng thời. Sau đó, mọi thứ sẽ hoạt động tốt – heorhi