Пожалуйста, не говорите EHCache или OSCache и т.д. Предположим для целей этого вопроса, что я хочу реализовать свои собственные, используя только SDK (обучение на практике). Учитывая, что кеш будет использоваться в многопоточной среде, какие datastructures вы использовали бы? Я уже реализовал один, используя LinkedHashMap и Коллекции # synchronizedMap, но мне любопытно, будут ли какие-либо из новых параллельных коллекций лучшими кандидатами.
UPDATE: я просто читал Yegge last, когда нашел этот самородок:
Если вам нужен постоянный доступ и вы хотите сохранить порядок вставки, вы не сможете сделать лучше, чем LinkedHashMap, действительно замечательная структура данных. Единственный способ, возможно, более замечательный, если бы существовала параллельная версия. Но, увы.
Я думал почти точно так же, прежде чем я пошел с реализацией LinkedHashMap
+ Collections#synchronizedMap
, упомянутой выше. Приятно знать, что я не просто что-то пропустил.
Основываясь на ответах до сих пор, мне кажется, что мой лучший выбор для высококонкурентного LRU будет заключаться в расширении ConcurrentHashMap, используя некоторые из та же логика, что и LinkedHashMap
.