Java:如果我使用callables,我如何填充地图?

时间:2012-02-10 10:18:46

标签: java database multithreading concurrency map

我想在我的应用程序中使用Map作为小型数据库“缓存”的形式 我认为最好使用类似的东西:

ConcurrentHashMap<K,Callable<V>>

因此,对于许多种类的数据库对象,我都有一个缓存(而不是每种类型的1个,即`ConcurrentHashMap<K,V>,其中V将是某个特定对象。

我现在的问题(假设以上所有想法都合理)是我如何在从DB启动时预加载此缓存?

我的意思是使用callable,如果我需要缓存中的某些内容并且不存在,则callable将在第一次获得它并在下一个get准备就绪。

但是如果我使用callables怎么能预先加载缓存呢?

注意:由于我的需求很小,我对使用某些库不感兴趣。

3 个答案:

答案 0 :(得分:0)

难道你不能做这样简单的事吗?

for (Callable<V> c : map.values()) {
    c.call();
}

答案 1 :(得分:0)

您可能应该在对象上使用接口:

public interface Cacheable{}

public MyObject implements Cacheable{...}

ConcurrentHashMap<K, Cacheable> = ...

答案 2 :(得分:0)

可能ConcurrentHashMap<K, Future<V>>有更好的运气,因为Future更好地匹配“在计算过程中或可能已经计算过的东西”的概念。您可以使用已经计算过的Future初始化缓存的某些元素。