Java中的读写锁:

多个读锁不互斥, 读锁与写锁互斥, 写锁与写锁互斥, 这是由JVM自行控制的,我们只要上好相应的锁即可。

缓存的设计:

package com.cn.gbx;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; public class CacheDesign {
private Map<String, Object> cache = new HashMap<String, Object>();
//对象锁的设计
// public synchronized Object getData(String key){
// Object value = null;
// value = cache.get(key);
// if (value == null) {
// value = "queryDao";
// cache.put(key, value);
// }
// return value;
// }
//可重入锁的设计
static ReadWriteLock rwl = new ReentrantReadWriteLock();
public synchronized Object getData(String key){
Object value = null;
rwl.readLock().lock();
try {
value = cache.get(key);
if (value == null) {
rwl.readLock().unlock();
rwl.writeLock().lock();
try{
if (value == null) { //确保后边的线程不会重读写
value = "queryDao";
cache.put(key, value);
}
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
} public static void main(String[] args) { }
}

  

最新文章

  1. 菜鸟git学习
  2. mysql 查询去重 distinct
  3. 扫描二维码自动识别手机系统(Android/IOS)
  4. docker 会这些也够
  5. sql server 2008 操作数据表
  6. 手机端Post 数据
  7. C# XML序列化操作菜单
  8. Mac设置
  9. 《JavaScript网页特效经典300例-高级篇》
  10. redis事务、管道及消息通知探究
  11. oracle查询锁表解锁语句
  12. 为什么Java 两个Integer 中1000==1000为false而100==100为true?
  13. Lintcode227 Mock Hanoi Tower by Stacks solution 题解
  14. 浅析GDAL库C#版本支持中文路径问题(续)
  15. Niop2017初赛滚粗记
  16. redis 基本原理及安装
  17. Immunity Debugger学习 二
  18. 理解Liang-Barsky裁剪算法的算法原理
  19. day13,day14
  20. 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)

热门文章

  1. Android 常用工具类之SPUtil,可以修改默认sp文件的路径
  2. ServiceStack.Redis 使用教程
  3. Majority Element
  4. Zero_qiqi DIV模式的省市区三级联动
  5. C#:通过Window API接口实现WiFi
  6. [ios][opengles]OpenGL ES基础知识简介
  7. miniUI子窗口调父窗口方法
  8. java环境log4j日志环境的配置。
  9. Session案例:简易的购物车
  10. php获取json文件数据并动态修改网站头部文件meta信息 --基于CI框架