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 }

  • 相关阅读:
    搜索旋转排序数组
    SpringBoot整合mybatis
    《浪潮之巅》阅读笔记01
    阅读杂记01
    go home or stand up
    关于URL编码/javascript/js url 编码(轉)
    水晶报表 相关。
    Format函数(转)
    asp 亂碼問題。
    圣人不死,大盗不止
  • 原文地址:https://www.cnblogs.com/lyunyu/p/3494725.html
Copyright © 2011-2022 走看看