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效应相关推荐

  1. java线程:互斥锁与读写锁

    2019独角兽企业重金招聘Python工程师标准>>> 两种互斥锁机制: 1.synchronized 2.ReentrantLock ReentrantLock是jdk5的新特性, ...

  2. java 读写锁_Java中的读写锁

    一.读写锁 1.初识读写锁 a)Java中的锁--Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...

  3. java怎么写算法_关于读写锁算法的Java实现及思考

    问题背景:多个线程对一个共享的资源进行读写访问.写线程之间需要互斥,读线程跟写线程需要互斥,读线程之间不用互斥. 早些时候听张sir的课,讲述java5中增强并发的功能.用java.util.conc ...

  4. 对变量移位顺序读写_Java多线程并发读写锁ReadWriteLock实现原理剖析

    关于读写锁 Java语法层面的synchronized锁和JDK内置可重入锁ReentrantLock我们都经常会使用,这两种锁都属于纯粹的独占锁,也就是说这些锁任意时刻只能由一个线程持有,其它线程都 ...

  5. java writelock 问题_【转】java并发编程系列之ReadWriteLock读写锁的使用

    前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读 ...

  6. Java锁详解之改进读写锁StampedLock

    文章目录 先了解一下ReentrantReadWriteLock StampedLock重要方法 StampedLock示例 StampedLock可能出现的性能问题 StampedLock原理 St ...

  7. Java多线程学习十六:读写锁 ReadWriteLock 获取锁有哪些规则

    读写锁 ReadWriteLock 获取锁有哪些规则呢? 在没有读写锁之前,我们假设使用普通的 ReentrantLock,那么虽然我们保证了线程安全,但是也浪费了一定的资源,因为如果多个读操作同时进 ...

  8. java 分布式 redis缓存技术_JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载...

    课程名称 JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载 课程目标 本课程从0基础开始,对redis的方方面面进行细粒度的讲解:包括基础操作.高级命令.各种集群模式.动态增减节点 ...

  9. java+icepdf+下载_Java使用icepdf将pdf文件按页转成图片

    本文实例为大家分享了Java使用icepdf将pdf文件按页转成图片的具体代码,供大家参考,具体内容如下 Maven icepdf包,这里过滤掉jai-core org.icepdf.os icepd ...

最新文章

  1. 一次综合的、深入浅出的压感的回顾与总结
  2. java怎么统计字符串中各个字母的个数,人生转折!
  3. 两个相邻时间之间的差值计算
  4. CodeForces - 820D Mister B and PR Shifts(思维+模拟)
  5. jsr 269 api_研究Java 9 Money and Currency API(JSR 354)
  6. mysql_real_escape_string 报错_addslashes与mysql_real_escape_string的区别
  7. php通过ajax下载文件,通过Ajax如何请求下载Execl文件
  8. 2019央视春晚公布主持阵容 语言类节目将有突破
  9. 每周一书-《程序开发心理学(银年纪念版)》
  10. I2C 时序、速率计算及intel I2C驱动
  11. linux中文变成日文,linux nkf 日文编码转换命令[转载]
  12. 通过anaconda下载 opencv的方法
  13. Permute 3 for mac(万能音视频转换器)
  14. 天枢系统 | 白条账单架构及618备战
  15. 三层交换机动态路由配置
  16. Android camera2扫描
  17. Visual Studio Code 代码显示空格等空白符的方法
  18. 异常:java.lang.LinkageError: loader constraint violation: when resolving interface method javax.servl
  19. sql实现学生信息查询
  20. Java后端学习路线图

热门文章

  1. 小程序获取城市行政区号_小程序获取用户手机号操作代码示例
  2. SSH笔记-Struts2的通配符
  3. 华为ensp 解决40错误,完美方式(当你所有方法都试过了,不妨试试这个)
  4. 【js循环经典题】假如你的入职薪水为10k,每年涨幅入职薪水的5%,50年后你的工资是多少?
  5. python开发跟淘宝有关联微_python - 爬取某淘宝店铺所有宝贝遇到的问题?
  6. 制作最简化的Win XP安装盘(nLite)
  7. PPT2013 动画应该这样玩-秦川-专题视频课程
  8. 暴力破解工具Hydra 常用命令总结
  9. 美食杰-菜谱大全右侧主体
  10. jQuery圆点图片轮播切换插件