一个简单的I/O读写锁
来源:互联网 发布:hessian矩阵 编辑:程序博客网 时间:2024/04/28 15:02
缓存系统的理解:
间于用户和数据库中间的一个环节,我们知道用户直接访问数据库的时间是远大于直接访问内存,所以有了缓存区后用户访问数据时 这样,用户先访问缓存区当缓存区有用户需要的数据时直接拿走,当缓存区没有这样的数据,访问数据库并把访问所得的数据放在缓存区,这样当下一个需要这个数据的用户就直接访问内存即可得到。(ps:来自importNEW博客《一道面试题比较synchronized和读写锁》,作者:where)
核心代码实现:
/** * Title: 一个简单的I/O读写锁 * 一般我们对数据的操作无非两种:“读”和“写”。 * 那么在大量数据的读写操作的时候平凡的操作数据库的效率就会变得很慢, * 相对于在缓存中读取数据是非常的慢,那么我们可以使用读写锁来设计一个缓存系统,来提升我们对大量数据读写的效率。 * 需要注意的一个问题: * 关于unlock操作,我们知道只要是上了锁就必须要解锁,但是有这么一种情况就是当你上完锁后在执行解锁操作前程序出现异常, * 那这个所可能就一直存在。所以针对这个问题我们一般将unlock操作放在finally代码块中,就可以保证上了的锁一定会被解。 * 这里我们还能仔细的思考下,synchronized和I/O读写锁的区别。 * Description: TestDemo * @author: xg.chen * @date:2016年8月2日 */public class Lock { /** * MethodsTitle: 通过读写锁来获取数据 * Description: TestDemo * @author: xg.chen * @date:2016年8月2日 */ public static Object getData(String key){ //将数据数据库取出来的数据放在map中 Map<String, String> map=new HashMap<String, String>(); String id="001"; String name="zhangsna"; map.put(id, name); //设置读写锁过程 ReadWriteLock rw = new ReentrantReadWriteLock(); rw.readLock().lock();//在读前先上读锁 Object result = null; try{ result = map.get(key); if(result==null){//如果内存中没有所要数据,这里的if比较关键,它避免了多余的几次对数据库的读取 rw.readLock().unlock(); rw.writeLock().lock(); if(result==null){ try{ //用这个代替对数据库访问得到数据的步骤 result = "缓存中数据是空的,这里我们可以取数据获取自己想要的数据!"; }finally{ rw.writeLock().unlock(); } rw.readLock().lock(); } } }finally{ rw.readLock().unlock(); } return result; } //测试模块 public static void main(String[] args) { String id="002"; Object o=getData(id); System.out.println(o); }}
0 0
- 一个简单的I/O读写锁
- Proteus 8086 简单I/O读写实验
- mysql 磁盘读写的I/O优化
- I/O 简单文本文件读写改 对象 ArrayList保存文件的记录
- JAVA I/O 流学习(一)简单的文件读写
- JAVA I/O流 (二)--一个读写文件的小工具类TextFile
- I/O读写总结
- 自己实现一个简单的读写锁
- 使用简单的管道I/O
- linux I/O的简单总结
- 简单的文件I/O处理
- C++中的简单文件的I/O
- C++简单的文件I/O操作
- 对异步I/O的简单介绍
- Java I/O的简单理解
- QT 简单的I/O操作
- 新手入门的I/O简单基础知识
- 多路复用I/O Epoll的简单使用
- 生活中的物理、化学
- urllib2下载器网页的三种方法
- 测试开发微博第三方登录
- 如何将github项目导入Android Studio
- 使用 NuGet Package Explorer 制作 js 包
- 一个简单的I/O读写锁
- LDA︱基于LDA的Topic Model变形+一些NLP开源项目
- Android5.0+(Toolbar)
- nyoj一种排序
- iOS状态栏设置详解!
- javascript高级之操作符、作用域
- 答案1
- Android版本和API Level的对应关系
- 安装Composer与laravel安装