package com.ming.thread;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class MingCache {
/**
* 用过缓存的map
*/
private Map<String,Object> cache=new HashMap<String,Object>();
/**
* 读写锁
*/
private ReadWriteLock lock=new ReentrantReadWriteLock();
/**
* 通过缓存获取数据 考虑多线程情况
* @author: chenhuaming
* @param key
* @return
* 2018年3月29日下午11:29:28
*/
public Object getData(String key){
lock.readLock().lock();//处理多线程读取安全问题
Object obj=null;
try {
obj = cache.get(key);
if(null==obj){
lock.readLock().unlock();
lock.writeLock().lock();//处理并情况
try {
if(null==obj){//处理并发写锁的情况产生的性能问题
obj="ming";//此处去查数据库
}
} catch (Exception e) {
e.printStackTrace();
}finally{
lock.writeLock().unlock();
}
lock.readLock().lock();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
lock.readLock().unlock();
}
return obj;
}
}
适用读写锁编写的一个自定义缓存例子
最新推荐文章于 2022-03-24 11:51:41 发布
本文介绍了一个名为MingCache的缓存实现,该实现利用了读写锁来解决多线程环境下数据的一致性和并发访问问题。当从缓存中获取数据时,它首先尝试使用读锁来提高效率;如果发现数据不存在,则升级为写锁进行数据加载。
摘要由CSDN通过智能技术生成