缓存功能(简单的synchronized和使用读写锁)
发布日期:2021-09-16 12:20:06 浏览次数:9 分类:技术文章

本文共 908 字,大约阅读时间需要 3 分钟。

使用synchronized:

class MyCache{	private Map
cache = new HashMap
(); public synchronized Object getObject(String key){ //加上锁是为了避免多个线程在得到的value都为null时,都同时去访问数据库 Object value=cache.get(key); if(value==null){ value="aaaaa";//其实是从数据库中得到相关的记录 cache.put(key, value); } return value; }}
使用读写锁:

class MyCache1{	private Map
cache = new HashMap
(); 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; }}

转载地址:https://blog.csdn.net/wxwzy738/article/details/7487741 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:顺序表的练习
下一篇:读写锁的简单运用

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月30日 02时40分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章