不多说,上代码
package com.lyj; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class CacheSystemDemo { private static Map<String, Object> map = new HashMap<String, Object>(); private static ReadWriteLock rwl = new ReentrantReadWriteLock(); public static void main(String[] args) { getData("h"); } public static Object getData(String key) { rwl.readLock().lock(); Object value = null; try { value = map.get(key); if (value == null) { rwl.readLock().unlock(); rwl.writeLock().lock(); try { //防止后面线程再次写数据 if (value == null) { value = "hello"; } } finally { rwl.writeLock().unlock(); } rwl.readLock().lock(); } } finally { rwl.readLock().unlock(); } return value; } }