设计一个缓存器 ReadLock提升性能

/**
 * 
 * @描述: 设计一个缓存器 ReadLock提升性能.
 * @做者: Wnj .
 * @建立时间: 2017年5月16日 .
 * @版本: 1.0 .
 */
public class CacheDemo {
    
    private Map<String, Object> cache = new HashMap<String, Object>();
    
    public static void main(String[] args) {
        
    }
    
    private ReadWriteLock rwl = new ReentrantReadWriteLock();
    
    /**
     * 检查是有对应key的数据,有则返回,没有则从DB中查询
     * <功能详细描述>
     * @param key
     * @return
     */
    public Object getData(String key) {
        //上读锁
        rwl.readLock().lock();
        Object value = null;
        try {
            value = cache.get(key);
            if (value == null) {
                //发现要写的时候,释放读锁,不让别人读了
                rwl.readLock().unlock();
                //上写锁,当有三个线程,第一个线程lock以后,其它线程就锁不了了,或者说等其它两个读(写)的线程,读(写)完,lock才能锁上去
                rwl.writeLock().lock();
                
                //第以前一个写线程释放后,第二个线程获取写lock,要从新判断一下是否须要再写(读),具体可参考jdk文档
                try {
                    if (value == null) {
                        value = "aaaa";//查询数据库存
                    }
                }
                finally {
                    //释放写锁
                    rwl.writeLock().unlock();
                }
                //还原成读锁
                rwl.readLock().lock();
            }
        }
        finally {
            rwl.readLock().unlock();
        }
        return value;
    }
}
相关文章
相关标签/搜索