Como você implementaria um cache LRU em Java?

Por favor, não diga EHCache ou OSCache, etc. Suponhamos, para fins desta pergunta, que eu queira implementar meu próprio usando apenas o SDK (aprendendo fazendo). Dado que o cache será usado em um ambiente multithread, quais estruturas de dados você usaria? Já implementei um usando o LinkedHashMap...