0

javadoc toexpireAfterAccessメソッドには次のように書かれています。

エントリの作成後、その値の最新の置換後、または最後のアクセス後、一定の期間が経過すると、各エントリがキャッシュから自動的に削除されるように指定します。アクセス時間は、すべてのキャッシュの読み取りおよび書き込み操作 (Cache.asMap().get(Object) および Cache.asMap().put(K, V) を含む) によってリセットされますが、Cache のコレクション ビューに対する操作によってはリセットされません。 asMap

次のコードがあります。

Cache<String, String> cache = CacheBuilder.newBuilder()
                .expireAfterAccess(2, TimeUnit.SECONDS)
                .build();
        ConcurrentMap<String, String> map = cache.asMap();
        map.put("a", "12345");
        System.out.println("First access: " + map.get("a"));
        System.out.println("Second access: " + map.get("a"));
        Thread.sleep(1900); //1.9 seconds
        System.out.println("Third access: " + map.get("a"));
        Thread.sleep(1000); //1 second
        System.out.println("Fourth access: " + map.get("a"));
        Thread.sleep(1500); //1.5 second
        System.out.println("Fivth access: " + map.get("a"));

そしてその出力は次のとおりです。

First access: 12345
Second access: 12345
Third access: 12345
Fourth access: 12345
Fivth access: 12345

そのため、collection-view で get 操作を実行すると、アクセス時間もリセットされることがわかります。そのような場合、javadocの太字のフレーズは何を意味しますか?

4

1 に答える 1

3

Cache.asMap のコレクション ビューに対する操作

によって公開されるコレクションMap、、、のビューCacheです。これらのいずれかを反復しても、アクセス時間はリセットされず、 で取得した a の値も書き込まれません。keySet()values()entrySet()Map.EntryentrySet()

于 2013-06-20T19:45:10.057 に答える