java 使用读写锁设计一个缓存模型


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

/**
 * 使用读写锁  实现一个 缓存模型
 *
 */
public class CasheDemo {

	/**
	 * @param args
	 */
	private Map<String,Object> cache=new HashMap<String, Object>();
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	
	/*
	public synchronized Object getData(String key){
		Object value=cache.get(key);
		if(value==null){
			value="aaa"; //实际去queryDB();
		}
		return value;
	}*/

	//多个线程 读取的时候 可以同时并发.不会造成数据的破坏与冲突,
	//但发现 数据为空的时候,该线程 改成 写锁 用来填充数据,写完后变成 读锁.
	private ReadWriteLock rwl=new ReentrantReadWriteLock();
	public Object getData(String key){
		rwl.readLock().lock();
		Object value=null;
		try {
			value=cache.get(key);
			if(value==null){
				rwl.readLock().unlock();
				rwl.writeLock().lock();
				try {
					if(value==null)
						value="aaa"; //实际去queryDB();
				} catch (Exception e) {
					// TODO: handle exception
				}finally{
					rwl.writeLock().unlock();
				}
				rwl.readLock().lock();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			rwl.readLock().unlock();
		}
		return value;
	}

}

猜你喜欢

转载自takeme.iteye.com/blog/2315403