Если вы хотите испачкать руки для реализации кэша с LRU, LinkedHashMap может быть выбором.
LinkedHashMap позволяет получить доступ к элементам с порядком вставки или порядком доступа (по умолчанию это порядок вставки), который поддерживается двойным списком.
Для порядка доступа, при реализации операций доступа получения или размещения, доступ к элементу будет удален до конца списка двойной связи.
Более того, с помощью защищенного метода, как показано ниже, LinkedHashMap позволяет расширить его и настроить собственную стратегию удаления старшего элемента.
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return false;
}
Порядок доступа и возможность удаления старшего элемента позволяют создавать собственный кэш с помощью LRU.
Кстати, LinkedHashMap не является поточно-ориентированным, однако вы можете реализовать свой собственный поточно-безопасный метод получения / установки.