java怎样将数据保存到缓存中,之后再保存

来源:互联网 发布:恒扬数据副总经理 编辑:程序博客网 时间:2024/06/09 23:21
package com.henry;import java.util.HashMap;import java.util.Map;import java.util.Random;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class CacheDataTest { static Map<Integer,Object> dataMap=new HashMap<Integer,Object>(); static ReadWriteLock lock=new ReentrantReadWriteLock();//创建读写锁的实例 static Object getData(Integer key){  lock.readLock().lock();//读取前先上锁  Object val=null;  try{   val=dataMap.get(key);   if(val == null){    // Must release read lock before acquiring write lock    lock.readLock().unlock();    lock.writeLock().lock();    try{     //可能已经由其他线程写入数据     if(val==null){      //dataMap.put(key, "");//query from db      val=queryDataFromDB(key);     }    }finally{     //Downgrade by acquiring read lock before releasing write lock     lock.readLock().lock();     // Unlock write, still hold read     lock.writeLock().unlock();    }   }  }finally{   lock.readLock().unlock();//最后一定不要忘记释放锁  }  System.out.println("get data key="+key+">val="+val);  return val; } static Object queryDataFromDB(Integer key){  Object val=new Random().nextInt(1000);  dataMap.put(key, val);  System.out.println("write into data key="+key+">val="+val);  return val; } public static void main(String[] args) {  for(int i=0;i<10;i++){   new Thread(new Runnable(){public void run() {    getData(new Random().nextInt(5));   }}).start();  } }}
原创粉丝点击