博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ehcache(07)——Ehcache对并发的支持
阅读量:6919 次
发布时间:2019-06-27

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

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所写)

 

转载地址:http://bnhcl.baihongyu.com/

你可能感兴趣的文章
web打印控件免费
查看>>
WinPcap之获取已安装设备的高级信息
查看>>
Docker网络常用命令
查看>>
linux中文件/目录普通权限
查看>>
win7主机无法访问虚拟机httpd主页,以及IP冲突导致ssh无法连接虚拟机
查看>>
linux更换网卡网卡名称变化更改
查看>>
降低Redis内存占用
查看>>
mysql中 如何合并两张表
查看>>
mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群...
查看>>
CentOS 7 单机安装 kafka 0.11.0.1
查看>>
超强的sql语句
查看>>
MongoDB 复制(副本集)
查看>>
磁盘分区
查看>>
正则匹配密码强度
查看>>
Scanner类 与 String类
查看>>
JEPLUS表格组件数据延伸展示——JEPLUS软甲快速开发平台
查看>>
使用jenv管理多个java版本
查看>>
script标签src以//开头
查看>>
Linux的哲学思想
查看>>
闪电修手机上门维修,我的头号选择!
查看>>