java简单实现缓存的三种方法

来源:互联网 发布:wmf榨汁机 知乎 编辑:程序博客网 时间:2024/05/16 15:39
package com.tb.test;import java.util.HashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class CachedTest {// 第一种方法 用hashmap存 然后加锁get方法// private HashMap<String, Object> cached = new HashMap<String, Object>();//// public synchronized Object get(String user){//Object value=cached.get(user);// if( value== null){////  value ="sss"; //实际上是从数据库中读取// cached.put(user, value);// }//// return value;// }// 第二种方法是用ConcurrentHashMap// private ConcurrentHashMap<String, Object> cached= new// ConcurrentHashMap<String, Object>();//// public Object get(String user){//Object value=cached.get(user);// if(value == null){////  value ="sss"; //实际上是从数据库中读取// cached.put(user, value);// }//// return value;////// }// 第三种 用hashmap 加读写锁private HashMap<String, Object> cached = new HashMap<String, Object>();private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();public Object get(String user) {readWriteLock.readLock().lock();Object value = null;try {value = cached.get(user);if ( value == null) {readWriteLock.readLock().unlock();readWriteLock.writeLock().lock();try {if(value ==  null){ value = "aa"; // 实际上从数据库读取 cached.put(user, value);}} finally {readWriteLock.writeLock().unlock();}readWriteLock.readLock().lock();}} finally {readWriteLock.readLock().unlock();}return value;}}

0 0
原创粉丝点击