欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-28 18:37:46
...

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;
	}

}
相关标签: 缓存模型