java - 并发和 CacheLoader.load()

标签 java caching concurrency guava

我应该同步 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/

相关文章:

java - ScheduledExecutorService 性能

php - 清除 drupal 缓存 - php 脚本

mysql - 两个查询的执行是否有可能相互干扰

java - 在程序中得到不一致/错误的输出多线程java

java - 缓存 : Why my diskStore path directory is not created?

windows - 对于超过 32 个内核的系统,如何替换 SetProcessAffinityMask()/GetProcessAffinityMask()?

java - 使用 struts 和 hibernate 的 Dao 层和业务逻辑

java - PrintWriter 创建空文件

java - 如何上传文件(txt,pdf)并在同一网页中显示它?

c# - 缓存属性 : Easier way?