缓存功能(简单的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 Mapcache = 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秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
gets和puts
2019-04-26
fgets、gets_s和fputs
2019-04-26
解决centos7联网问题
2019-04-26
c字符串函数
2019-04-26
nyoj1328派队方案
2019-04-26
nyoj322Sort归并排序
2019-04-26
nyoj1235A/B Problem逆元
2019-04-26
nyoj1270 care for China记忆化搜索
2019-04-26
linux常用命令
2019-04-26
快速排序qsort
2019-04-26
nyoj42一笔画问题欧拉图
2019-04-26
nyoj880还是打印菱形
2019-04-26
第八届蓝桥杯第4题:方格分割
2019-04-26
nyoj608畅通工程
2019-04-26
解决linux下mysql忘记密码的情况
2019-04-26
nyoj1101Oh, my God!错排公式
2019-04-26
nyoj动物统计字典树
2019-04-26
操作系统模拟生产者消费者问题
2019-04-26
JavaWeb的
2019-04-26
如何用JAVA爬取AJAX加载后的页面
2019-04-26