码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-25 11:49:08      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:rgs   data   作者   div   线程   turn   final   文档   tran   

/**
 * 
 * @描述: 设计一个缓存器 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;
    }
}

 

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

标签:rgs   data   作者   div   线程   turn   final   文档   tran   

原文地址:http://www.cnblogs.com/superGG/p/6902478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!