标准缓存系统--JAVA读写锁的使用
2013-04-09 22:52
309 查看
package cn.itcast.heima2;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 多线程下的缓存系统<br>
* 高效率的缓存系统,防止多线程重复写操作
* @author RSun
* @Date 2013-4-5上午12:00:57
*/
public class CacheDemo {
private Map<String, Object> cache = new HashMap<String, Object>();
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 = "aaaa";//实际queryDB();
}
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
}
}
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 多线程下的缓存系统<br>
* 高效率的缓存系统,防止多线程重复写操作
* @author RSun
* @Date 2013-4-5上午12:00:57
*/
public class CacheDemo {
private Map<String, Object> cache = new HashMap<String, Object>();
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 = "aaaa";//实际queryDB();
}
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
}
}
相关文章推荐
- 使用 Java 缓存系统缓存频繁查看的数据
- 如何使用bloomfilter构建大型Java缓存系统
- Java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Hadoop实验:用java直接使用FileSystem以标准输出格式显示Hadoop文件系统中的文件
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- 使用Java设计一个 高可用、高效率的缓存系统
- 如何使用bloomfilter构建大型Java缓存系统
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- 10行Java代码实现最近被使用(LRU)缓存
- 深入探讨在集群环境中使用 EhCache 缓存系统
- myeclipse将java小程序打成jar包,并在Linux系统和Windows系统上使用
- 使用java代码来实现dvd管理系统
- Java缓存框架使用EhCache结合Spring AOP
- 使用xmlhttp和Java session监听改善站内消息系统
- java开发系统内核:使用LDT保护进程数据和代码
- shiro 使用缓存时出现:java.io.NotSerializableException: org.apache.shiro.util.SimpleByteSource
- 深入探讨在集群环境中使用 EhCache 缓存系统
- Java乔晓松-使用Filter过滤器清除网页缓存
- android调用系统的自定义裁剪后得到的图片不清晰,使用MediaStore.EXTRA_OUTPUT获取缓存下的清晰图片