设计一个缓存器 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;
    }
}

 

posted @ 2017-05-25 10:39  superGG  阅读(288)  评论(0编辑  收藏  举报