zoukankan      html  css  js  c++  java
  • 利用readwritelock简单模拟实现多线程下cache的系统

     1 package cn.lyy.hibernate.many2one;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 import java.util.concurrent.locks.ReadWriteLock;
     6 import java.util.concurrent.locks.ReentrantReadWriteLock;
     7 
     8 public class MultiCacheDemo {
     9 
    10     private Map<String, Object> cache = new HashMap<String,Object>();
    11     public static void main(String args[]){
    12         
    13     }
    14     
    15     private ReadWriteLock rwl = new ReentrantReadWriteLock();
    16     public Object getData(String key){
    17         rwl.readLock().lock();
    18         Object value = null;
    19         try{
    20             value = cache.get(key);
    21             if(value == null){
    22                 rwl.readLock().unlock();
    23                 rwl.writeLock().lock();
    24                 try{
    25                     //因为如果同时又多个线程在读数据的话,可能会同时发现value
    26                     //为空,所以应该再在这里加一个if语句判断value是否为空
    27                     if(value == null){
    28                         
    29                     value = "aaaa";  //实际是去queryDB();
    30                     
    31                     }
    32                 }finally{
    33                     rwl.writeLock().unlock();
    34                 }
    35                 rwl.readLock().lock();
    36             }
    37         }finally{
    38             rwl.readLock().unlock();
    39         }
    40         return value;
    41     }
    42 }

  • 相关阅读:
    【调试】关于F9
    【vue】vue变量定义的位置
    【js】MVVM模型
    RE最全面的正则表达式----数字篇
    Spider & CrawlSpider
    论小脚本的重要性
    论小脚本的简单性3
    论小脚本的简单性2
    论小脚本的简单性
    git的常用命令
  • 原文地址:https://www.cnblogs.com/lyunyu/p/3494725.html
Copyright © 2011-2022 走看看