設計一個緩存器 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;
    }
}
相關文章
相關標籤/搜索