java缓存突然失效_Java-No.06 读写锁控制缓存失效照成的Dogpile效应
package mon;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.log4j.Logger;
import cn.guagua.mobile.cache.redis.Redis;
/**
* 读写锁控制强制读取缓存同步
* @author shma
* @date 2014-10-11 15:04:28
*/
public class SynchCacheLock {
private static final Logger logger = Logger.getLogger(SynchCacheLock.class);
private static Redis.RedisClient redis1 = new Redis.RedisClient("1");
private ReadWriteLock lock = null;
private Lock readLock = null; // 读锁
private Lock writeLock = null; // 写锁
public SynchCacheLock() {
lock = new ReentrantReadWriteLock();
readLock = lock.readLock();
writeLock = lock.writeLock();
System.out.println(Thread.currentThread().getName() + ">>> cache lock init...");
}
public T getCache(String key, Runnable task) {
T obj = null;
readLock.lock();
try {
obj = (T) redis1.getObject(key);
if(obj == null) {
System.out.println(Thread.currentThread().getName() + " read request " + key + " is null, wait query...");
readLock.unlock();
writeLock.lock();
try {
obj = (T) redis1.getObject(key);
if(obj == null) {
task.run();//强制执行执行写缓存任务
System.out.println(Thread.currentThread().getName() + " read request " + key + " end...");
obj = (T) redis1.getObject(key);
}
} catch(Throwable e) {
System.out.println("readLock error...");
e.printStackTrace();
} finally {
readLock.lock();
writeLock.unlock();
}
}
System.out.println(Thread.currentThread().getName() + " read request " + key + " data...");
} catch(Throwable e) {
System.out.println("lock error...");
e.printStackTrace();
} finally {
readLock.unlock();
}
return obj;
}
}
java缓存突然失效_Java-No.06 读写锁控制缓存失效照成的Dogpile效应相关推荐
- java线程:互斥锁与读写锁
2019独角兽企业重金招聘Python工程师标准>>> 两种互斥锁机制: 1.synchronized 2.ReentrantLock ReentrantLock是jdk5的新特性, ...
- java 读写锁_Java中的读写锁
一.读写锁 1.初识读写锁 a)Java中的锁--Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...
- java怎么写算法_关于读写锁算法的Java实现及思考
问题背景:多个线程对一个共享的资源进行读写访问.写线程之间需要互斥,读线程跟写线程需要互斥,读线程之间不用互斥. 早些时候听张sir的课,讲述java5中增强并发的功能.用java.util.conc ...
- 对变量移位顺序读写_Java多线程并发读写锁ReadWriteLock实现原理剖析
关于读写锁 Java语法层面的synchronized锁和JDK内置可重入锁ReentrantLock我们都经常会使用,这两种锁都属于纯粹的独占锁,也就是说这些锁任意时刻只能由一个线程持有,其它线程都 ...
- java writelock 问题_【转】java并发编程系列之ReadWriteLock读写锁的使用
前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读 ...
- Java锁详解之改进读写锁StampedLock
文章目录 先了解一下ReentrantReadWriteLock StampedLock重要方法 StampedLock示例 StampedLock可能出现的性能问题 StampedLock原理 St ...
- Java多线程学习十六:读写锁 ReadWriteLock 获取锁有哪些规则
读写锁 ReadWriteLock 获取锁有哪些规则呢? 在没有读写锁之前,我们假设使用普通的 ReentrantLock,那么虽然我们保证了线程安全,但是也浪费了一定的资源,因为如果多个读操作同时进 ...
- java 分布式 redis缓存技术_JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载...
课程名称 JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载 课程目标 本课程从0基础开始,对redis的方方面面进行细粒度的讲解:包括基础操作.高级命令.各种集群模式.动态增减节点 ...
- java+icepdf+下载_Java使用icepdf将pdf文件按页转成图片
本文实例为大家分享了Java使用icepdf将pdf文件按页转成图片的具体代码,供大家参考,具体内容如下 Maven icepdf包,这里过滤掉jai-core org.icepdf.os icepd ...
最新文章
- 一次综合的、深入浅出的压感的回顾与总结
- java怎么统计字符串中各个字母的个数,人生转折!
- 两个相邻时间之间的差值计算
- CodeForces - 820D Mister B and PR Shifts(思维+模拟)
- jsr 269 api_研究Java 9 Money and Currency API(JSR 354)
- mysql_real_escape_string 报错_addslashes与mysql_real_escape_string的区别
- php通过ajax下载文件,通过Ajax如何请求下载Execl文件
- 2019央视春晚公布主持阵容 语言类节目将有突破
- 每周一书-《程序开发心理学(银年纪念版)》
- I2C 时序、速率计算及intel I2C驱动
- linux中文变成日文,linux nkf 日文编码转换命令[转载]
- 通过anaconda下载 opencv的方法
- Permute 3 for mac(万能音视频转换器)
- 天枢系统 | 白条账单架构及618备战
- 三层交换机动态路由配置
- Android camera2扫描
- Visual Studio Code 代码显示空格等空白符的方法
- 异常:java.lang.LinkageError: loader constraint violation: when resolving interface method javax.servl
- sql实现学生信息查询
- Java后端学习路线图
热门文章
- 小程序获取城市行政区号_小程序获取用户手机号操作代码示例
- SSH笔记-Struts2的通配符
- 华为ensp 解决40错误,完美方式(当你所有方法都试过了,不妨试试这个)
- 【js循环经典题】假如你的入职薪水为10k,每年涨幅入职薪水的5%,50年后你的工资是多少?
- python开发跟淘宝有关联微_python - 爬取某淘宝店铺所有宝贝遇到的问题?
- 制作最简化的Win XP安装盘(nLite)
- PPT2013 动画应该这样玩-秦川-专题视频课程
- 暴力破解工具Hydra 常用命令总结
- 美食杰-菜谱大全右侧主体
- jQuery圆点图片轮播切换插件