muszę mapę z następujących wymogów:Jednoczesne Mapa ze stałym rozmiarze
Należy wysoce współbieżne. Metody mogą być wywoływane przez wiele wątków jednocześnie.
Powinien mieć stały rozmiar. Jeśli rozmiar
HashMap
osiąga maksymalną wartość (na przykład 10000), dodanie nowego wpisu do mapy nie powinno być dozwolone. NIE MOŻE to być pamięć podręczna LRU, w której najstarszy wpis zostanie usunięty po osiągnięciu maksymalnego rozmiaru.
ConcurrentHashMap
może spełniać # 1. Nie wiem jednak, w jaki sposób # 2 można wdrożyć na podstawie ConcurrentHashMap
bez wpływu na współbieżność (dodanie niestandardowej metody put()
, która zostanie dodana do mapy tylko wtedy, gdy rozmiar jest mniejszy niż maksymalny rozmiar, musi zostać "zsynchronizowany". cel użycia równoczesnego HashMap
).
Proszę dać mi znać swoje myśli.
sprawdź rozmiar przed umieszczeniem? – vefthym
w concurrenthashmap podany rozmiar nie jest dokładny. może użyć concurrenthashmap z semaforem zliczającym? –
"nie wiem, w jaki sposób # 2 można zastosować na ConcurrentHashMap bez wpływu na współbieżność" ... Nie rozumiem, dlaczego to będzie problem. Tworzysz opakowanie, które na współbieżnej mapie wprowadza licznik. Aby zsynchronizować dostęp do licznika, należy użyć własnego prymitywu synchronizującego (np. ReentrantLock), aby zminimalizować dodatkowe obciążenie i oddzielić go od synchronizacji współbieżnej mapy. Wtedy wszystko powinno działać dobrze – heorhi