2010-05-05 3 views
3

J'ai besoin de mettre en cache des objets avec des temps de création assez importants, et j'ai besoin d'une sémantique de création exactement une fois. Il devrait être possible de créer simultanément des objets pour différents CacheKeys. Je pense que je besoin de quelque chose qui (sous le capot) fait quelque chose comme ceci:Cache java multithread pour les objets lourds à créer?

ConcurrentHashMap<CacheKey, Future<HeavyObject>> 

Existe-t-il des implémentations open source existantes de ce que je peux réutiliser?

Répondre

3

Avez-vous regardé Guava classe MapMaker? Je pense qu'il fera tout ce dont vous avez besoin - bien que, au lieu de fournir un Future, vous donniez à la classe un Function<? super K, ? extends V> qui est utilisé pour calculer la valeur.

Rétrospectivement sur votre poste, si vous avez vraiment besoin de mettre des valeurs là-dedans plutôt que de les calculer, il ne fonctionnera pas aussi bien - mais je vais laisser la suggestion dans le cas d'une carte de calcul est correct pour toi.

+0

Non en fait, c'est bon d'utiliser une fermeture;) Je souhaite seulement que j'ai des fermetures;) – krosenvold

0

Si vous avez besoin de cache java avancé, regardez Ehcache ou JBoss Cache.

J'ai utilisé le second et bien qu'il ne soit pas développé (l'effort est destiné au nouveau projet Infinispan), il fonctionne bien. Vous pouvez utiliser cacheloaders pour la logique objet-à-cache personnalisée.

Questions connexes