- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我应该同步 CacheLoader.load() 中的代码吗?
我有这样的代码:
final Calculator calculator = new Calculator();
final LoadingCache<Key, Value> cache = CacheBuilder.newBuilder().build(new CacheLoader<Key, Value>(){
@Override
public Value load(final Key key) throws Exception {
return calculator.calc(key);
}} );
如果缓存需要从两个不同的线程加载两个不同键的值,我是否需要担心计算器对象中的线程干扰? IE。我应该将我的 Calculator.calc() 方法声明为同步的(或者做其他事情来确保线程安全)吗?
编辑
为了清楚起见,我特别询问有关 Guava 缓存的问题:http://code.google.com/p/guava-libraries/wiki/CachesExplained
最佳答案
这取决于 load
方法中操作的线程安全性。它可以针对不同的键同时执行。因此,如果操作不是线程安全的,则应该以某种方式实现(同步是最简单的选项)。
因此,如果 calculator.calc(key)
不是线程安全的,请同步它。如果是,请不要。
关于java - 并发和 CacheLoader.load(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212416/
我的 cacheIterator 中有重复的键。 我正在调用一个使用 SOAP 的 Web 服务来为保险公司的保单评级。我正在尝试使用 Cachebuilder/loader 将 DTO 存储为键并将
我在这里不知所措。 我在手动加载/插入 Guava 缓存方面非常幸运,但我认为它应该更加“线程安全”(通过 CacheLoader)。 当我重构为使用 CacheLoader.load 样式语法时,我
我正在实现简单的 guava CacheLoader,正如这里所述 CacheLoader loader = new CacheLoader() { public Graph load
我正在尝试使用 Google Guava 缓存按服务相关对象进行缓存。在缓存未命中时,我使用我的 REST 客户端来获取对象。我知道我可以通过以下方式做到这一点: CacheLoader loader
我应该同步 CacheLoader.load() 中的代码吗? 我有这样的代码: final Calculator calculator = new Calculator(); final Loadi
问题说明了我想使用 CacheBuilder,但我的值是异步拉入的。这以前与 MapMaker 一起使用,因为 CacheLoader 不是必需的。现在我想知道我是否可以解决这个问题,或者是否有任何不
我是 Google 的 Guava 库的新手,对 Guava 的缓存包很感兴趣。目前我下载了 10.0.1 版。在查看文档后,JUnit 测试了源代码,即使在广泛搜索 google 之后,我仍然无法弄
我使用 Guava LoadingCache 来存储 Animal 类型的对象,其中键是动物名称。到目前为止一切顺利。 然后我使用 get() 方法获取缓存的对象并检索 Animal 对象。之后,我添
假设我有两个线程,线程 A 和线程 B,以及 LoadingCache该文件为空,且有效期为 10 分钟。一个CacheLoader用于构建LoadingCache它所做的一切都是从数据库中检索。 假
我有一个带有 CacheLoader 的 Guava 缓存。我在线程中跟踪了一个外部条件,如果发生这种情况,我想异步 refresh() 所有条目。出于这个原因,我没有使用 invalidateAll
我想存储 {organizationId, userId} -> userEmail 的缓存,但我可用的 API 会返回给定组织的所有电子邮件。只要我获得了所有这些值,在调用 CacheLoader:
抱歉,文字墙;底部有摘要。 我正在制作一个将在多台服务器上运行的 Java 应用程序的原型(prototype)。每个实例都有一个嵌入式 Infinispan 缓存,缓存被配置为以复制模式形成集群。缓
我很想知道 google guava 11.0 库中引入的 loadAll 方法实现的有效方式是什么。 下面是描述load all方法实现扩展的代码 根据 CachesExplained 的示例 Lo
我正在尝试使用 Maven 在 Scala IDE for Eclipse 中运行 Spark 程序。但是,我在初始化 SparkConf 的行上收到 java.lang.NoClassDefFoun
我正在使用Guava LoadingCache像这样: @Inject private ExecutorService executorService; private LoadingCache> c
例如: CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterAccess(1, TimeU
我们正在使用由 CacheLoader 构建的 Guava LoadingCache。 我们正在寻找的是一个缓存,它会定期刷新其内容,但如果 key 不再被访问,也会在给定(更长)的时间范围后使 ke
初学Guava缓存,看了文档一头雾水 https://code.google.com/p/guava-libraries/wiki/CachesExplained . 使用带有加载方法的缓存加载器与使
我非常喜欢 Guava 11 的 CacheLoader(感谢 Google!)的两件事是 loadAll(),它允许我一次加载多个 key ,以及 reload(),当它“过时”时,它允许我异步重新
我正在尝试使用 Guava 缓存库创建缓存。我的主要要求之一是我想在 CacheLoader.load(..) 函数之后设置缓存过期,而不是我在网络上遇到的大多数示例,如下所示。 LoadingCac
我是一名优秀的程序员,十分优秀!