Guava的API AbstractLoadingCache
和CacheLoader
充满了单词"线程安全"和"异步"。
不幸的是,我无法从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)。然后,当加载完成时,绘制图形。
有可能吗?
答案 0 :(得分:0)
现在我想检查一下,如果某个键的值包含在缓存中,如果是,则绘制图形。但如果不是,则绘制存根,启动加载并继续工作(GUI)。
使用Cache#getIfPresent
如果它返回非null
,请绘制它。
否则,绘制你的存根,调用Thread
开始Cache#get
(或者更好地向某个执行者提交任务)。当它返回时,绘制真实的东西。