7

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);
             }
           });

質問: このcreateExpensiveGraph(key)方法は何ですか? HashMap<Key, Value>これはマッピングを返すメソッドですか? 私は価値と何をしなければなりませんkeyか?

または、値List<String>を使用する必要がなく、このメソッドでa を返すこともできますか?key

4

1 に答える 1

19

キャッシュの考え方は、通常、次の問題があるということです。

Graph get(Key key) {
    Graph result = get( key );
    if( null == result ) {
        result = createNewGraph( key );
        put( key, result );
    }
    return result;
}

さらに、このコードをマルチスレッド環境で使用するときに発生する通常の同期の問題もあります。

Guava がボイラープレートを実行します。実装するだけですcreateNewGraph()。Java が機能する方法は、インターフェイスを実装する必要があることを意味します。この場合、インターフェイスはCacheLoader.

キャッシュ全体がマップに少し似ていると思われる場合はCacheLoader、キーがマップで見つからない場合に呼び出されるコールバックです。ローダーはキーを取得し (通常、このキーに期待されるオブジェクトを作成するための有用な情報が含まれているため) get()、将来返される値を返します。

于 2013-10-31T12:31:50.200 に答える