For*_*ato 4 java concurrency caching 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);
}} );
Run Code Online (Sandbox Code Playgroud)
如果缓存需要从两个不同的线程加载两个不同键的值,我是否需要担心我的Calculator对象中的线程干扰?即我应该声明我的Calculator.calc()方法是同步的(或做其他事情以确保线程安全)?
编辑
就这样我很明确地询问Guava中的缓存问题:http://code.google.com/p/guava-libraries/wiki/CachesExplained
这取决于load
方法中动作的线程安全性.它可以同时针对不同的密钥执行.因此,如果操作不是线程安全的,那么它应该以某种方式进行(同步是最简单的选项).
因此,如果calculator.calc(key)
不是线程安全的,请同步它.如果是,不要.
归档时间: |
|
查看次数: |
2860 次 |
最近记录: |