簡易緩存系統設計

以下是本人自己實現的一個簡易緩存系統的設計,與大家分享下,如有不足之處請大家指出,一起學習進步:

 

package com.mt;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
* 簡易緩存系統的設計
* @author yxh
*
*/
public class CacheData {
//定義個緩存容器用來裝數據
private Map<String,Object> cache = new HashMap<String,Object>();
//定義一個讀寫鎖
private ReadWriteLock rwl = new ReentrantReadWriteLock();

//根據傳入的key獲取數據
public Object getData(String key){
//進來獲取數據的時候馬上一把讀鎖
rwl.readLock().lock();
Object data = cache.get(key);
try{
if(data==null){
//如果發現數據爲空的話就要進行寫操作了,那麼首先釋放讀鎖,馬上加寫鎖
rwl.readLock().unlock();
rwl.writeLock().lock();
/**此處再加一個判斷的原因是:如果多個線程同時進行讀的時候,都爲null
* 則都會釋放讀鎖,而去爭奪寫鎖,最終第一個獲取到了寫鎖,那麼其他的線程則
* 等待,直到第一個線程寫好數據,把寫鎖釋放後,第二個線程獲取到了寫鎖,再想去寫
* 此時判斷下發現已經有值則就不會再去寫值了。
*/
try{
if(data==null){
//如果從緩存中獲取的值爲空那麼則去數據庫獲取
data ="00000000";
cache.put(key, data);
}
}catch(Exception e){

}finally{
//寫完後釋放寫鎖
rwl.writeLock().unlock();
}
//寫完後重新把讀鎖上上
rwl.readLock().lock();

}
}finally{
//釋放讀鎖
rwl.readLock().unlock();
}
return data;
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章