Jak zaimplementowałbyś pamięć podręczną LRU w Javie?

Proszę nie mówić o EHCache lub OSCache, itp. Załóżmy na potrzeby tego pytania, że ​​chcę zaimplementować własny używając tylko SDK (ucząc się przez działanie). Biorąc pod uwagę, że pamięć podręczna będzie używana w środowisku wielowątkowym, jakich struktur danych użyjesz? Zaimplementowałem już...