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; } }
推荐阅读