Ehcache(07)——Ehcache对并发的支持
http://haohaoxuexi.iteye.com/blog/2119733
Ehcache对并发的支持
在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素Key的Read(读)、Write(写)锁。当一个线程获取了某一Key的Read锁之后,其它线程获取针对于同一个Key的Read锁不会受到限制,但其它线程(包括获取了该Key的Read锁的线程)如果想获取针对同一个Key的Write锁就不行,它需要等到针对于该Key的Read锁释放后才能获取其Write锁;当一个线程获取了某一Key的Write锁之后,其它线程获取同一个Key的Read锁或者Write锁的请求将等待针对于该Key的Write锁释放后才能继续进行,但是同一个线程获取该Key对应的Read锁或者Write锁将不需要等待。获取了对应的锁之后,记得在不再需要该锁后释放该锁。并且需要注意不要引起死锁。
在Ehcache接口中为我们定义了几个与Read、Write锁相关的方法,具体方法如下所示:
public interface Ehcache { /**
* 获取给定Key的Read锁
* @param key
*/
public void acquireReadLockOnKey(Object key); /**
* 获取给定Key的Write锁
* @param key
*/
public void acquireWriteLockOnKey(Object key); /**
* 尝试着获取给定Key的Read锁,如果在给定timeout时间内还没有获取到对应的Read锁,则返回false,否则返回true。
* @param key
* @param timeout 超时时间,单位是毫秒
* @return表示是否获取到了对应的Read锁
* @throws InterruptedException
*/
public boolean tryReadLockOnKey(Object key, long timeout) throws InterruptedException; /**
* 尝试着获取给定Key的Write锁,如果在给定timeout时间内还没有获取到对应的Write锁,则返回false,否则返回true。
* @param key
* @param timeout 超时时间,单位是毫秒
* @return表示是否获取到了对应的Write锁
* @throws InterruptedException
*/
public boolean tryWriteLockOnKey(Object key, long timeout) throws InterruptedException; /**
* 释放所持有的给定Key的Read锁
* @param key
*/
public void releaseReadLockOnKey(Object key); /**
* 释放所持有的给定Key的Write锁
* @param key
*/
public void releaseWriteLockOnKey(Object key); }
我们常用的Cache类已经为我们实现了这些方法,我们可以直接在程序中进行使用。以下是直接在程序中使用锁的一个简单示例。
@Test
public void test() {
CacheManager cacheManager = CacheManager.create();
cacheManager.addCache("test");
Cache cache = cacheManager.getCache("test");
final String key = "abc";
cache.acquireWriteLockOnKey(key);
try {
cache.put(new Element(key, "123"));
} finally {
System.out.println(cache.get(key));
cache.releaseWriteLockOnKey(key);
}
}
记得需要在合适的时候释放所获取的锁。
(注:本文是基于ehcache2.8.1所写)
Ehcache(07)——Ehcache对并发的支持的更多相关文章
- Ehcache配置文件ehcache.xml
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http:// ...
- 现代 C++ 对多线程/并发的支持(上) -- 节选自 C++ 之父的 《A Tour of C++》
本文翻译自 C++ 之父 Bjarne Stroustrup 的 C++ 之旅(A Tour of C++)一书的第 13 章 Concurrency.用短短数十页,带你一窥现代 C++ 对并发/多线 ...
- MySQL案例07:MySQL5.7并发复制隐式bug
我们MySQL线上环境大部分使用的是5.7.18的版本,这个版本已修复了很多bug,但针对主从复制的bug还是有很多的,尤其是一些组复制.并行复制的bug尤为突出,在5.7.19版本有做相应改善和修复 ...
- JDK1.8版本,java并发框架支持锁包括
1.自旋锁,自旋,jvm默认是10次,由jvm自己控制,for去争取锁 2.阻塞锁 被阻塞的线程,不会争夺锁 3.可重入锁,多次进入改锁的域 4.读写锁 5.互斥锁,锁本身就是互斥的 6.悲观锁,不相 ...
- 截止JDK1.8版本,java并发框架支持锁包括?
读写锁 自旋锁 乐观锁
- Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包
0. Collections.synchronizedXxx() Java 中常用的集合框架中的实现类:HashSet/TreeSet.ArrayList/LinkedList.HashMap/Tre ...
- 缓存插件 Spring支持EHCache缓存
Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能.其中,spring对EHCache提供了很好的支持. 在介绍Spring的缓 ...
- Spring Boot中使用EhCache实现缓存支持
SpringBoot提供数据缓存功能的支持,提供了一系列的自动化配置,使我们可以非常方便的使用缓存.,相信非常多人已经用过cache了.因为数据库的IO瓶颈.一般情况下我们都会引入非常多的缓存策略, ...
- Mybatis加入Ehcache支持
1.Mybatis默认的缓存配置 MyBatis 包括一个很强大的查询缓存特性,它能够很方便地配置和定制. Mybatis缓存包括全局的缓存和局部的缓存.全局的缓存能够讲主配置文件的setting属性 ...
随机推荐
- 【转】iOS 开发之协议protocal-代理传值delegate
原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...
- 5、NFC概述
什么是NFC NFC(Near Field Communication,近场通信),是一种数据传输技术.但与Wi-Fi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米. NFC ...
- 解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
在win下用Go语言的cgo时(比如下面场景)我们会用到的GCC编译器,Win下我们一般用MinGW. Golang连接Oracle数据库:win下 golang 跨平台编译 MinGW全称Minim ...
- kinect 录制彩色和深度视频
安装 KinectSDK-v1.8-Setup.exe OpenNI-Windows-x86-2.1.0.msi Qt工程 拷贝 Redist 下内容到 编译的exe所在目录 #include < ...
- word添加页码
问:在Word里面,分两栏插入页码,怎么使两栏都有页码? 可以通过插入域来实现分两栏后两栏都有页码.左边一栏页码为 当前页页码×2-1 :右边一栏页码为 当前页页码×2.在页眉页脚视图中,分别在左右两 ...
- Android 设置 横屏 竖屏 (转)
http://2960629.blog.51cto.com/2950629/701227 方法一:在AndroidManifest.xml中配置 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目 ...
- 使用arm开发板搭建无线mesh网络(一)
由于项目的需要,老板让我使用arm开发板(友善之臂的tiny6410)搭建无线mesh网络.一般而言,无线自组织网络的网络设备都是由用户的终端设备来充当,这些终端设备既要处理用户的应用数据,比如娱乐, ...
- 在IT网站上少花些时间
我自己关注的IT网站还是蛮多的,经常去的有CSDN,博客园,51CTO,InfoQ,还有微博,微信上关注了IT程序猿,IT技术博客大学习,程序员之家, 开发者头条,还有还有,我还通过邮件订阅了码家周刊 ...
- UVALive 3953 Strange Billboard (状态压缩+枚举)
Strange Billboard 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/A Description The marke ...
- SpringBoard
[SpringBoard] Springboard, or Home Screen, is the standard application that manages the iOS home scr ...