Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用LoadingCache创建异步加载程序?_Java_Caching_Asynchronous_Guava - Fatal编程技术网

Java 如何使用LoadingCache创建异步加载程序?

Java 如何使用LoadingCache创建异步加载程序?,java,caching,asynchronous,guava,Java,Caching,Asynchronous,Guava,Guava的API包含线程安全和异步两个字 不幸的是,我无法从API推断出,如何使用它创建异步延迟加载程序 例如,他们有一个样本 CacheLoader<Key, Graph> loader = new CacheLoader<Key, Graph>() { public Graph load(Key key) throws AnyException { return createExpensiveGraph(key); } };

Guava的API包含线程安全和异步两个字

不幸的是,我无法从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);
现在我想检查一下,某个键的值是否包含在缓存中,若包含,那个么画一个图。但如果没有,则绘制存根,启动加载并继续工作。然后,当加载完成时,绘制图形

可能吗

现在我想检查一下,某个键的值是否包含在缓存中,若包含,那个么画一个图。但如果没有,则绘制存根,启动加载并继续工作

使用CachegetIfPresent,如果它返回非null,则绘制它


否则,绘制存根、启动线程或更好地向调用Cacheget的执行者提交任务。当它返回时,画出真实的东西。

我可以用HashMap来做这件事。那么LoadingCache做什么呢?@SuzanCioc顾名思义,它负责加载和缓存。只要需要,就可以随时加载,而不必担心。但在这种情况下,你会在意,因为你不想等待它发生,这会使它变得不那么有用缓存是更复杂的部分,所有的过期和容量选项都很难让你自己选择。但是,如果您不需要加载和缓存,那么映射确实就足够了。大约,CacheLoader支持异步重新加载-当已经计算值时,您可以让缓存继续返回旧结果,而新结果是异步计算的。但是加载初始值是同步进行的。