用读写锁实现一个缓存系统
来源:互联网 发布:js创造对象 编辑:程序博客网 时间:2024/06/07 06:35
package cn.itcast.gz;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 用读写锁实现的一个缓存系统,读的时候可以并发执行,当缓存中没有数据时,要到数据库中查询数据
* 此时只能写数据,不能读数据。当完数据之后,又可以并发地读取数据。
* 这样做的话,可以提高 系统的效率
* @author long
*
*/
public class MyCacheSystem {
// 定义一个map用来存放要缓存起来的数据
Map<String, Object> cache = new HashMap<String, Object>();
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
public static void main(String[] args) {
}
//该方法中,读数据可以并发地读取,写数据与读数据,写数据与写数据之间不能并发地运行
public Object getData(String key) {
//刚进来的时候,上一把写锁
rwl.readLock().lock();
Object obj = null;
try {
obj = cache.get(key);
if (obj == null) {
//如果数据为空,则需要到数据库中查询数据,所以这时候把读锁释放掉,上一把写锁,不能同时写数据
//在上写锁之前,首先要把读锁释放掉
rwl.readLock().unlock();
rwl.writeLock().lock();
// 查询数据库的代码
try {
//必须重新检查obj是否为空,因为这时候,另外一个线程可能会获得写锁,从而让obj有值
if (obj == null) {
obj = "查询数据库得到的数据";
}
} finally {
rwl.writeLock().unlock();
}
//因为前面释放了写锁,所以这里要把写锁重新锁上
rwl.readLock().lock();
}
} finally {
rwl.readLock().unlock();
}
return obj;
}
}
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 用读写锁实现的一个缓存系统,读的时候可以并发执行,当缓存中没有数据时,要到数据库中查询数据
* 此时只能写数据,不能读数据。当完数据之后,又可以并发地读取数据。
* 这样做的话,可以提高 系统的效率
* @author long
*
*/
public class MyCacheSystem {
// 定义一个map用来存放要缓存起来的数据
Map<String, Object> cache = new HashMap<String, Object>();
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
public static void main(String[] args) {
}
//该方法中,读数据可以并发地读取,写数据与读数据,写数据与写数据之间不能并发地运行
public Object getData(String key) {
//刚进来的时候,上一把写锁
rwl.readLock().lock();
Object obj = null;
try {
obj = cache.get(key);
if (obj == null) {
//如果数据为空,则需要到数据库中查询数据,所以这时候把读锁释放掉,上一把写锁,不能同时写数据
//在上写锁之前,首先要把读锁释放掉
rwl.readLock().unlock();
rwl.writeLock().lock();
// 查询数据库的代码
try {
//必须重新检查obj是否为空,因为这时候,另外一个线程可能会获得写锁,从而让obj有值
if (obj == null) {
obj = "查询数据库得到的数据";
}
} finally {
rwl.writeLock().unlock();
}
//因为前面释放了写锁,所以这里要把写锁重新锁上
rwl.readLock().lock();
}
} finally {
rwl.readLock().unlock();
}
return obj;
}
}
0 0
- 用读写锁实现一个缓存系统
- 读写锁实现缓存系统
- 利用读写锁写一个缓存系统
- 利用读写锁模拟一个缓存系统
- 多线程 : 读写锁实现缓存系统
- 读写锁实现缓存系统demo
- 【读写锁】ReadWriteLock闪亮登场、自己写一个缓存系统
- 【读写锁】ReadWriteLock闪亮登场、自己写一个缓存系统
- 多线程之使用读写锁ReentrantReadWriteLock实现缓存系统
- 利用读写锁简单实现一个缓存demo
- 用java5读写技术实现一个伪缓存技术
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- Java中读写锁的实现及使用读写锁简单实现缓存系统的实例
- 设计一个缓存系统 java多线程读写锁的应用
- 《黑马程序员》 读写锁之缓存系统
- java读写锁设计缓存系统
- <>' operator is not allowed for source level below 1.7
- MyEclipse 每次保存都要building workspace的解决方法
- java 解压缩zip 压缩zip
- C++11变长模板解析(深入理解C++11)
- 如何写一份有内涵的商业需求文档
- 用读写锁实现一个缓存系统
- [转载]WinForm窗体间传值的方法
- Git使用技巧(整理)一
- oracle 基本操作练习——简单的sql语句
- 用meteor开发网页时html中的seletc 默认选项的设置
- VB中 MSComm控件使用详解
- 屏幕尺寸、密度,分辨率查询网站(手机、平板、显示器)
- android调用系统拍照
- I帧,P帧,B帧 压缩率对比