`

线程安全的缓存类简单实现

阅读更多

一个线程安全的缓存类简单实现:

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class Cache {
	private Map<String, Object> cacheData = new HashMap<String, Object>();
	private ReadWriteLock rwlock = new ReentrantReadWriteLock();
	
	public Object get(String key) {
		rwlock.readLock().lock();
		Object value = cacheData.get(key);
		try {
			if(value == null) {
				rwlock.readLock().unlock();
				rwlock.writeLock().lock();
				try {
					if(null == (value = cacheData.get(key))) {
						value = ""; //获取实际数据
						cacheData.put(key, value);
					}
				} finally {
					rwlock.writeLock().unlock();
				}
				rwlock.readLock().lock();
			}
		} finally {
			rwlock.readLock().unlock();
		}		
		return value;
	}
}

 

分享到:
评论

相关推荐

    VC模拟实现管道缓存,可多线程共享数据。

    做多媒体应用,经常需要在各线程间共享数据,本例子介绍了一种简便的缓存管理办法。...3. 代码简单,一个类实现。提供详细测试例子。 注意: 测试例子只是为测试双线程读写。 N个线程,需要改写例子。

    多线程处理视频进行缓冲处理

    多线程处理视频时,由于不同线程处理速度不同步,不同线程之间的数据传递需要...附件中利用C++实现了一个调用非常简单的通用缓冲池类,在工程实践中可以直接调用。对数据结构略作修改,在其它应用场合都可以使用.zip

    android 网络应用轻量框架-多线程管理-高效缓存-设计模式

    AsyncTask_GridViewActivity 使用android自带的AsyncTask类实现 Demo_GridViewActivity 队列任务管理 线程控制 Demo_GridViewActivity方式 1:队列优先级 (如果想要listview中移动的区域优先被显示,而不是从上...

    C#线程锁介绍源码

    比如,最简单的情况是,一个计数器,两个线程 同时加一,后果就是损失了一个计数,但相当频繁的锁定又可能带来性能上的消耗,还有最可怕的情况死锁。那么什么情况下我们需要使用锁,什么情况下不需要 呢? 1)只有...

    cl-memcached:Memcached 对象缓存系统的快速、线程安全接口

    CL-内存缓存CL-MEMCACHED 是一个简单、快速且线程安全的库,用于与对象缓存系统交互。 它实现了 Memcached TEXT 协议。 根据主页: memcached是一种高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻...

    ringbuf:Go 的线程安全环形缓冲区实现

    环缓冲 Ringbuf 是 go 语言的 ringbuffer 的简单无锁​​实现。

    LazyCache:易于使用的线程安全的内存中缓存服务,带有针对C#的简单的开发人员友好的API

    它具有对开发人员友好的基于泛型的API,并提供了线程安全的缓存实现,该实现保证只执行一次可缓存的委托一次(这很懒!)。 在后台,它利用Microsoft.Extensions.Caching和Lazy在重负载情况下提供性能和可靠性。...

    已缓存-简单功能缓存/存储-Rust开发

    高速缓存的缓存结构和简化的功能备忘缓存提供了几种高速...宏是线程安全的,其后备函数缓存包装在互斥体中。 函数缓存在函数执行期间不会被锁定,因此具有相同参数的长期运行函数的初始(在空缓存上)并发调用将各自

    Android中巧妙的实现缓存详解

    缓存有很多的实现方式,技巧性还有坑都很多,今天我给大家介绍一些非通用的方法,可以巧妙地帮大家简单实现一些内存缓存。 Supplier和Memoize SQLite是Android里常用的一种数据存储方式,在访问数据库数据时需要...

    Python 使用threading+Queue实现线程池示例

    在线程池缓存线程可用已有的闲置线程来执行新任务,避免了创建/销毁带来的系统开销。 1.2 线程并发数量过多,抢占系统资源从而导致阻塞。 线程能共享系统资源,如果同时执行的线程过多,就有可能导致系统资源不足而...

    多线程处理视频时,由于不同线程处理速度不同步,不同线程之间的数据传递需要进行缓冲处理

    多线程处理视频时,由于不同线程处理速度不同步,不同线程之间的数据传递需要...附件中利用C++实现了一个调用非常简单的通用缓冲池类,在工程实践中可以直接调用。对数据结构略作修改,在其它应用场合都可以使用.zip

    Java并发编程实战

    4.4 在现有的线程安全类中添加功能 4.4.1 客户端加锁机制 4.4.2 组合 4.5 将同步策略文档化 第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException ...

    Java 并发编程实战

    4.4 在现有的线程安全类中添加功能 4.4.1 客户端加锁机制 4.4.2 组合 4.5 将同步策略文档化 第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-ModificationException ...

    EHCache缓存

    ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,是hibernate中默认的CacheProvider。

    Java典型模块

    6.2 没有实现线程安全的火车票售票系统 6.2.1 火车票的类 6.2.2 售票台的类 6.2.3 实现线程安全的火车票售票系统 6.3 知识点扩展——线程的同步知识 6.3.1 为什么要使用同步机制 6.3.2 Synchronized的同步块 6.3.3 ...

    架构设计之分布式缓存

    1:前言我们在开发系统的过程中,缓存是个有用的模块。下面我就把我们的缓存模块给大家做个简单介绍。2:类图3:简单介绍缓存分为两个部分。一个是缓存结构一个是存储结构...待改进的地方:缓存没有实现一些像FIFO,LFU,

    通用日志记录组件

    整个日志记录的调度全部统一放在公共组件中,使用者只需要构建两个派生类,实现简单灵活,当前只针对写入到文件的日志记录,后面逐步增加到数据库的结构化日志存储接口 * 一个派生类,用于指定其实现的日志记录...

    LRU Cache的简单C++实现

    什么是 LRU  LRU Cache是一个Cache的置换算法,含义是“近少使用”,把满足“近少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是近刚刚访问的,因为这样的数据更有...  由于我只是简单实现一下这个算

    C++数据结构与算法之双缓存队列实现方法详解

    由于接收端在任何情况下停止响应即可能产生数据丢失,因此无法简单的设计一条线程安全队列来对数据写入或读取(读取数据时将队列上锁视为对写入的停止响应)。 鉴于此,我的设计思路如下: 接收端首先向A队列中写入...

Global site tag (gtag.js) - Google Analytics