¿Cómo implementaría un caché LRU en Java?

Por favor, no diga EHCache o OSCache, etc. Suponga a los fines de esta pregunta que quiero implementar el mío usando solo el SDK (aprender haciendo). Dado que el caché se usará en un entorno multiproceso, ¿qué estructuras de datos usaría? Ya he implementado uno usando LinkedHashMap y Collections #...