【发布时间】:2015-07-22 23:14:41
【问题描述】:
假设我有两个线程,线程 A 和线程 B,以及一个空的 LoadingCache<String, String>,其有效期为 10 分钟。 CacheLoader 用于构建 LoadingCache,它所做的一切都是从数据库中检索的。
假设LoadingCache 仍然是空的并且LoadingCache.get(key) 被线程A 和线程B 同时调用。 CacheLoader.load() 方法会被调用两次吗?
根据我在文档中阅读的内容:
如果另一个调用 get(K) 或 getUnchecked(K) 当前正在加载 键的值,只是等待该线程完成并返回其 加载值。请注意,多个线程可以同时加载值 用于不同的键。
为了验证我的理解,如果线程 A 和线程 B 之间有 5ms 的差异,那么线程 A 会自动锁定 CacheLoader.load() 方法,加载值,然后线程 B 只是拾取加载的值。有了这个,同步就没有必要了。是这样吗?
【问题讨论】:
标签: java multithreading caching guava