I would like to call your attention to the following project: http://code.google.com/p/concurrentlinkedhashmap/. It is a version of java.util.LinkedHashMap optimized for use in concurrent environments. It's perfectly suited for the implementation of caches. It supports different eviction policies.
The following discussion thread http://groups.google.com/group/concurrentlinkedhashmap/browse_thread/thread/1b6501f0dede6ff6 is particularly focused on the implementation of the LRU EvictionPolicy. This is also a call for feedback and suggestions for implementation.