google Collection 的MapMaker使用体验

  前几天准备在写一个本地缓存的时候,有一个功能是设置超时时间,我当时用的是每次get的时候判断上次get的时间,跟当前时间对比看是否超过预期时间,来决定是否过期的。

       RednaxelaFX提示我说,可以考虑使用googleCollection的MapMaker,除了可以设置超时功能外,还可以绑定key的未取到值的function,当通过get(key)取缓存为空的时候,可以通过这个绑定的function来将返回值put到缓存中,留着下一次get。

       听完这些介绍,心动不已,找个时间,简单的test了下MapMaker,果然感觉很强大。

 

       GoogleCollection的下载地址:http://code.google.com/p/google-collections/       

 

       下面是我的测试代码。

 

 

Java代码   收藏代码
  1. import java.util.concurrent.ConcurrentMap;  
  2. import java.util.concurrent.TimeUnit;  
  3.   
  4. import com.google.common.base.Function;  
  5. import com.google.common.collect.MapMaker;  
  6.   
  7. /** 
  8.  * @author guoliang created GoogleColTestMain.java 
  9.  * @since 2010-4-28 下午05:48:55 
  10.  */  
  11. public class GoogleColTestMain {  
  12.   
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.         /** 
  18.          * softKeys 
  19.          * weakValues 
  20.          * 可以设置key跟value的strong,soft,weak属性。不错不错。 
  21.          * expiration(3, TimeUnit.SECONDS)设置超时时间为3秒 
  22.          *  
  23.          */  
  24.         ConcurrentMap<String, String> testMap = new MapMaker().concurrencyLevel(32).softKeys().weakValues().expiration(  
  25.                 3, TimeUnit.SECONDS).makeComputingMap(new Function<String, String>() {  
  26.             /** 
  27.              * 这里就是绑定的根据key没找到value的时候触发的function, 
  28.              * 可以将这里的返回值放到对应的key的value中! 
  29.              * @param arg0 
  30.              * @return 
  31.              */  
  32.             @Override  
  33.             public String apply(String arg0) {  
  34.                 return "create:" + arg0;  
  35.             }  
  36.   
  37.         });  
  38.   
  39.         testMap.put("a""testa");  
  40.         testMap.put("b""testb");  
  41.   
  42.         System.out.println(testMap.get("a"));  
  43.         System.out.println(testMap.get("b"));  
  44.         System.out.println(testMap.get("c"));  
  45.   
  46.         /** 
  47.          * 这里sleep4秒钟过后, 
  48.          * 缓存都失效,再get就会根据绑定的function去获得value放在map中了。 
  49.          */  
  50.         try {  
  51.             Thread.sleep(4000);  
  52.         } catch (InterruptedException e) {  
  53.             // TODO Auto-generated catch block  
  54.             e.printStackTrace();  
  55.         }  
  56.           
  57.         /** 
  58.          * 看看这里的再输出,是不是就是新的值了!~ 
  59.          */  
  60.   
  61.         System.out.println(testMap.get("a"));  
  62.         System.out.println(testMap.get("b"));  
  63.         System.out.println(testMap.get("c"));  
  64.     }  
  65.   
  66. }  
 

 

       感觉果然很强大!感谢开源,感谢google~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值