如何使用LoadingCache <k,v>?</k,v>制作异步加载器

时间:2014-10-19 17:26:39

标签: java caching asynchronous guava

Guava的API AbstractLoadingCacheCacheLoader充满了单词&#34;线程安全&#34;和&#34;异步&#34;。

不幸的是,我无法从API推断,如何用它创建异步推迟加载器。

例如,他们有一个样本

CacheLoader<Key, Graph> loader = new CacheLoader<Key, Graph>() {
     public Graph load(Key key) throws AnyException {
       return createExpensiveGraph(key);
     }
   };
   LoadingCache<Key, Graph> cache = CacheBuilder.newBuilder().build(loader);

现在我想检查一下,如果某个键的值包含在缓存中,如果是,则绘制图形。但如果否,则绘制存根,启动加载并继续工作(GUI)。然后,当加载完成时,绘制图形。

有可能吗?

1 个答案:

答案 0 :(得分:0)

  

现在我想检查一下,如果某个键的值包含在缓存中,如果是,则绘制图形。但如果不是,则绘制存根,启动加载并继续工作(GUI)。

使用Cache#getIfPresent如果它返回非null,请绘制它。

否则,绘制你的存根,调用Thread开始Cache#get(或者更好地向某个执行者提交任务)。当它返回时,绘制真实的东西。