Java 如何使用guava CacheBuilder?

Java 如何使用guava CacheBuilder?,java,caching,guava,Java,Caching,Guava,我想使用guavasCacheBuilder,但找不到任何明确的示例来实现这一点 这些文件说明了以下代码: LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) .build( new CacheLoader<Key, Graph>() { public Graph load(Key key)

我想使用guavas
CacheBuilder
,但找不到任何明确的示例来实现这一点

这些文件说明了以下代码:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
       .maximumSize(1000)
       .build(
           new CacheLoader<Key, Graph>() {
             public Graph load(Key key) throws AnyException {
               return createExpensiveGraph(key);
             }
           });
LoadingCache-graphs=CacheBuilder.newBuilder()
.最大尺寸(1000)
.建造(
新缓存加载程序(){
公共图加载(键)引发任何异常{
返回createExpensiveGraph(键);
}
});
问题:这是什么
createExpensiveGraph(键)
方法?这是一个返回
HashMap
映射的方法吗?我与
值有什么关系


或者我也可以在此方法中返回一个
列表
,而不必以任何方式使用
值?

缓存的概念是,您通常会遇到以下问题:

Graph get(Key key) {
    Graph result = get( key );
    if( null == result ) {
        result = createNewGraph( key );
        put( key, result );
    }
    return result;
}
加上在多线程环境中使用此代码时通常会遇到的同步问题

番石榴为你做样板;您只需实现
createNewGraph()
。按照Java的工作方式,这意味着您必须实现一个接口。在这种情况下,接口是
CacheLoader


如果您认为整个缓存有点像一个映射,那么
CacheLoader
是一个回调,每当在映射中找不到键时就会调用它。加载程序将获取密钥(因为它通常包含创建该密钥所需对象的有用信息),并且它将返回
get()
将来应该返回的值。

请参阅CacheLoader和load方法的api,其中给出了使用该方法的明确含义?createExpensiveGraph不返回hashMap,而是返回Graph的对象。它是您试图缓存结果的任何函数。