public class CacheDemo { private Map<String,Object> cache = new HashMap<String,Object>(50); public static void main(String[] args) { } /* * 多个线程的并发执行,保证数据正确 * */ private ReadWriteLock rwl = new ReentrantReadWriteLock(); public Object getData(String key) { rwl.readLock().lock();// 加读锁,都可以读, Object value = null; try{ value = cache.get(key); if (value == null) { rwl.readLock().unlock(); // 释放读锁,都不可以读,让第一个线程去数据库中查数据,查好后输出, rwl.writeLock().lock(); // 加写锁,只有第一个线程可以加写锁添加成功, try { if (value == null) { // 保证不让后来的线程去加写锁 value = "aaaa";// 这是从数据库中取得值 } }finally { rwl.writeLock().unlock(); // 第一个线程释放写锁 } rwl.readLock().lock(); // 进而去读。其他线程开始加写锁,最后也会被释放 } }finally { rwl.readLock().unlock(); } return value; } } 要实现一个缓存并不是那么容易的,要考虑很多种情况