`
yznxing
  • 浏览: 370104 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

google Collection 的MapMaker使用体验

    博客分类:
  • java
阅读更多

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

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

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

 

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

 

       下面是我的测试代码。

 

 

import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;

import com.google.common.base.Function;
import com.google.common.collect.MapMaker;

/**
 * @author guoliang created GoogleColTestMain.java
 * @since 2010-4-28 下午05:48:55
 */
public class GoogleColTestMain {

    /**
     * @param args
     */
    public static void main(String[] args) {
    	/**
    	 * softKeys
    	 * weakValues
    	 * 可以设置key跟value的strong,soft,weak属性。不错不错。
    	 * expiration(3, TimeUnit.SECONDS)设置超时时间为3秒
    	 * 
    	 */
        ConcurrentMap<String, String> testMap = new MapMaker().concurrencyLevel(32).softKeys().weakValues().expiration(
                3, TimeUnit.SECONDS).makeComputingMap(new Function<String, String>() {
            /**
             * 这里就是绑定的根据key没找到value的时候触发的function,
             * 可以将这里的返回值放到对应的key的value中!
             * @param arg0
             * @return
             */
            @Override
            public String apply(String arg0) {
                return "create:" + arg0;
            }

        });

        testMap.put("a", "testa");
        testMap.put("b", "testb");

        System.out.println(testMap.get("a"));
        System.out.println(testMap.get("b"));
        System.out.println(testMap.get("c"));

        /**
         * 这里sleep4秒钟过后,
         * 缓存都失效,再get就会根据绑定的function去获得value放在map中了。
         */
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        /**
         * 看看这里的再输出,是不是就是新的值了!~
         */

        System.out.println(testMap.get("a"));
        System.out.println(testMap.get("b"));
        System.out.println(testMap.get("c"));
    }

}
 

 

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

 

 

 

 

5
2
分享到:
评论
7 楼 li361879355 2013-07-12  
[flash=200,200][url][img][img][list]
[*]
引用
引用
[u][i][b][list]
[*][*][img][url][flash=200,200]
[*][*]
[*][*]
[/flash][/url][/img]||||||| |||||||[*][/list][/b][/i][/u]|||||||
[/flash][/flash]
|||||||||||||||||
||||||||||||||||
||||||||||||||||
|||||||||||||||
|||||||||||||||
||||||||||||||
||||||||||||||
|||||||||||||
|||||||||||||
||||||||||||
||||||||||||
|||||||||||
|||||||||||
||||||||||
||||||||||
|||||||||
|||||||||
||||||||
||||||||
|||||||
|||||||
||||||
||||||
|||||
|||||
||||
||||
|||
|||
||
||
|
|

|||||||[/list][/img][/img][/url][/flash]|||||||
||||||
||||||
|||||
|||||
||||
||||
|||
|||
||
||
|
|
6 楼 allenny 2010-10-31  
RednaxelaFX 写道
话说你忘记感谢国家了……

哪一个国家?
5 楼 yznxing 2010-05-02  
melin 写道
可以了解一下这个:
http://code.google.com/p/concurrentlinkedhashmap/wiki/ExpirableCache



谢谢哇,先了解下!~
4 楼 melin 2010-05-01  
可以了解一下这个:
http://code.google.com/p/concurrentlinkedhashmap/wiki/ExpirableCache
3 楼 RednaxelaFX 2010-05-01  
话说你忘记感谢国家了……
2 楼 yznxing 2010-05-01  
恩 ,呵呵 !
多线程这块,我还没测试,
不过既然是create出来的ConcurrentMap
我想还是放心的,
下次有时间对并发再做个测试,
哈哈~~~

我准备吧这个放进我的cache小轮子里边去,写出来了,你给抓抓虫子哈~~~
1 楼 RednaxelaFX 2010-05-01  
最关键是get()操作去调用传进去的Function、超时清理之类的地方都考虑到了多线程使用的场景,都保证线程安全,可以少操心这点非常棒~

相关推荐

    mapmaker 中文使用说明

    本文将详细介绍如何使用MapMaker 3.0进行基因定位,通过实例演示以F2定位群体为例,介绍其在基因定位中的应用流程。 #### 数据整理 在使用MapMaker 3.0之前,首先需要对实验数据进行整理。以下步骤展示了如何将...

    mapmaker3.0中文使用说明书

    《Mapmaker 3.0中文使用说明书》详细阐述了这款广泛应用在遗传图谱构建和QTL定位领域的软件的功能、数据组织方式以及基本操作流程。Mapmaker 3.0是一款专为个人计算机(PC)设计的强大工具,它在生物信息学研究中...

    mapmaker exp V4.01.rar

    《Mapmaker EXP V4.01:遗传育种作图软件的进阶解析》 Mapmaker EXP是一款在遗传育种领域广泛应用的专业软件,...对于从事遗传育种研究的科研工作者而言,掌握这款软件的使用无疑会提高工作效率,推动科研成果的产出。

    45MapMaker

    在使用45MapMaker时,开发者可以根据游戏的设计风格和剧情设定,创建各种独特的地图场景,从森林、城堡到地下城,为玩家带来丰富多样的游戏体验。这款工具对于独立开发者或小型团队来说,是降低游戏开发门槛,提升...

    MAPmaker生物软件

    "MAPmaker生物软件"是一款专为生命科学研究设计的软件工具,主要用于基因定位和遗传图谱构建。...在实际使用过程中,熟练掌握MAPmaker的各项功能将极大地提高科研效率,并有助于揭示复杂的遗传模式。

    mapmaker3.0.rar

    MapMaker 3.0是一款专为生物学家和遗传学家设计的高级软件工具,它主要用于构建遗传连锁...在生物学研究中,尤其是遗传学领域,MapMaker 3.0的使用极大地提高了工作效率和研究精度,是遗传连锁图谱构建的首选软件之一。

    Mapmaker3.0_winQTLCart2.0简单中文教程和举例

    本教程将详细解读这两款软件的使用方法,以中文形式呈现,方便国内研究者学习和应用。 Mapmaker3.0是一款功能强大的遗传图谱构建软件,其核心在于能够处理大量遗传标记数据,通过计算标记之间的重组频率,构建遗传...

    Mapmaker作图软件使用演示资料PPT教案学习.pptx

    Mapmaker作图软件使用演示资料PPT教案学习.pptx

    L78Z MapMaker.rar

    3. `.project`:这是Eclipse IDE的项目配置文件,表明MapMaker的开发可能使用了Eclipse环境。它包含了构建路径、JRE版本等信息,对理解开发环境和构建流程有重要意义。 4. `bin-debug`:这是一个编译输出目录,通常...

    MapMaker Exp3.0b.exe

    MapMaker Exp3.0b.exe

    mapmaker:制作地图

    制图师-制作地图mapmaker为制作Map提供了一个更好的接口,因此您可以传递一个普通对象,而不是默认实现接受的2数组。使用 // default implementationnew Map ( [ [ 'key' , 'val' ] , [ 'greeting' , 'hi' ] ] )// ...

    google common jar包

    尤其是在系统设置或用户界面(UI)相关的组件中,使用Google Common库可以减少错误并提升整体应用程序的稳定性。 总之,"Google Common Jar包"是一个强大的工具集,包含了许多实用的Java工具类和方法,对于任何Java...

    AIC21-MapMaker:AIC21简单MapMaker

    【标题】"AIC21-MapMaker:AIC21简单MapMaker" 是一个与人工智能竞赛(AIC21)相关的地图制作工具。这个工具可能是为了帮助参赛者快速创建、编辑或定制比赛所需的虚拟地图,以供算法训练或比赛策略制定使用。 【描述...

    com.google.common.collect jar包

    《谷歌集合库jar包详解——以google-collect-1.0-rc1.jar为例》 在Java编程领域,Google提供了一系列强大的工具集,其中就包括`com.google.common.collect`包,它为Java开发者提供了丰富的集合操作和数据结构,极大...

    MapMaker.rar

    C++三维程序

    Google-Guava-Collections-使用介绍

    ### Google Guava Collections 使用介绍 #### 一、概述 Google Guava Collections 是 Java Collections Framework 的一个强大且实用的非官方扩展 API。它由 Google 工程师 Kevin Bourrillion 和 Jared Levy 在著名...

    视频图matlab代码-MAPmAKER:多机器人专用环境

    视频图matlab代码MAPmAKER:不确定性下执行多机器人LTL规划的工具 MAPmAKER是一个规划解决方案, 它基于去中心化算法 考虑时间逻辑中给出的复杂的高级任务 当只有部分环境知识可用时,此方法才有效。 作者 克劳迪奥...

    guava collection简介1

    Guava Collections 是 Google 的工程师 Kevin Bourrillion 和 Jared Levy 创作的一个开源库,利用他们在公司内部“20%”自由时间开发的成果。这个库是对 Java Collections Framework 的一个增强和扩展,旨在提供更...

Global site tag (gtag.js) - Google Analytics