当前位置:计算机技术 - 缓存功能(简单的synchronized和使用读写锁)


缓存功能(简单的synchronized和使用读写锁)
原创:netnorth 阅读次数:2652 日期:2018-01-30

使用synchronized:


[java] view plain copy

class MyCache{  

    private Map<String,Object> cache = new HashMap<String,Object>();  

    public synchronized Object getObject(String key){  

        //加上锁是为了避免多个线程在得到的value都为null时,都同时去访问数据库  

        Object value=cache.get(key);  

        if(value==null){  

            value="aaaaa";//其实是从数据库中得到相关的记录  

            cache.put(key, value);  

        }  

        return value;  

    }  

}  

使用读写锁:

[java] view plain copy

class MyCache1{  

    private Map<String,Object> cache = new HashMap<String,Object>();  

    private ReadWriteLock rwl = new ReentrantReadWriteLock();  

    public Object getObject(String key){  

        rwl.readLock().lock();  

        Object value=cache.get(key);  

        if(value==null){  

            rwl.readLock().unlock();//必须首先解锁才能获取写锁  

            rwl.writeLock().lock();  

            if(value==null){//这里为什么还要判断,避免多个写锁被阻塞(因为只能有一个写锁是互斥的)的时候,重复对value进行赋值,从而访问数据库  

                value="aaaaa";//其实是从数据库中得到相关的记录  

                cache.put(key, value);  

            }  

            //对锁进行降级,把写锁降级为读锁  

            rwl.readLock().lock();//重新获取读锁不放弃写锁  

            rwl.writeLock().unlock();//写锁解除,读锁仍在  

        }  

        rwl.readLock().unlock();  

        return value;  

    }  

}


公司概况
华旅网络是一家致力于软件开发、网络设计的互联网公司...
公司业务:软件开发,网站设计,企业CI设计,旅游、美食、交友互动平台......
友情链接

华旅网络官网(Official Website): h.91city.com h.c.91city.com 282509570.c.91city.com
©2017 华旅网络 版权所有 苏ICP备12078118号