A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘立波 中级黑马   /  2012-10-16 16:09  /  987 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.HashMap;

  2. import java.util.Map;

  3. import java.util.concurrent.locks.ReadWriteLock;

  4. import java.util.concurrent.locks.ReentrantReadWriteLock;

  5. public classCacheDemo {

  6. private Map<String,Object> cache= newHashMap<String, Object>(); //模拟缓存,每个key对应一个obj

  7. public static void main(String[] args) {

  8. }

  9. private ReadWriteLock rwl = newReentrantReadWriteLock();//定义读写锁

  10. //我们先跟去key去缓存中取数据,如果有的话,则返回对应的值,如果没有,去数据库中查找,返回查找到的值

  11. public Object getData(String key){

  12. rwl.readLock().lock();//上读锁

  13. Objectvalue = null;

  14. try {

  15. value= cache.get(key);

  16. if(value == null){//如果换从中没有的话 打开读锁

  17. rwl.readLock().unlock();

  18. rwl.writeLock();//读与写是互斥的,所以要先解开读锁,才能进行写操作(个人理解)

  19. try {

  20. value= “aaaa”;//实际是去数据库中queryDB();

  21. cache.put(key, value);//将得到的数据,存入缓存中。以后的线程直接在缓存中取值(张老师视频上没有,个人加的)

  22. }catch(Exception e) {

  23. }finally{

  24. rwl.writeLock().unlock();//释放读锁

  25. }

  26. rwl.readLock().lock();//还原读锁,防止下面的finally出现异常

  27. }

  28. }catch(Exception e) {

  29. }

  30. finally{

  31. rwl.readLock().unlock();

  32. }

  33. return value;

  34. }

  35. }

  36. 实现注意事项:此锁最多支持 65535 个递归写入锁和 65535 个读取锁。试图超出这些限制将导致锁方法抛出 .JDK_API_1_6_zh_CN.CHM::/java/lang/Error.html]Error。读写锁:多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马