栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > Java面试题

写一个小程序,模拟缓冲技术

Java面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

写一个小程序,模拟缓冲技术

  1. 模拟缓存系统:

    import java.util.HashMap;

    import java.util.Map;

    import java.util.concurrent.locks.ReadWriteLock;

    import java.util.concurrent.locks.ReentrantReadWriteLock;

    public classCacheDemo {

    private Map<String,Object> cache= newHashMap<String, Object>(); //模拟缓存,每个key对应一个obj

    public static void main(String[] args) {

    }

    private ReadWriteLock rwl = newReentrantReadWriteLock();//定义读写锁

    //我们先跟去key去缓存中取数据,如果有的话,则返回对应的值,如果没有,去数据库中查找,返回查找到的值

    public Object getData(String key){

    rwl.readLock().lock();//上读锁

    Objectvalue = null;

    try {

    value= cache.get(key);

    if(value == null){//如果换从中没有的话 打开读锁

    rwl.readLock().unlock();

    rwl.writeLock();//读与写是互斥的,所以要先解开读锁,才能进行写操作(个人理解)

    try {

    value= “aaaa”;//实际是去数据库中queryDB();

    cache.put(key, value);//将得到的数据,存入缓存中。以后的线程直接在缓存中取值(张老师视频上没有,个人加的)

    }catch(Exception e) {

    }finally{

    rwl.writeLock().unlock();//释放读锁

    }

    rwl.readLock().lock();//还原读锁,防止下面的finally出现异常

    }

    }catch(Exception e) {

    }

    finally{

    rwl.readLock().unlock();

    }

    return value;

    }

    }

    实现注意事项:此锁最多支持 65535 个递归写入锁和 65535 个读取锁。试图超出这些限制将导致锁方法抛出 .JDK_API_1_6_zh_CN.CHM::/java/lang/Error.html]Error。读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/264194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号