2010-01-13 8 views
3

Je suis en train de passer de Google Collections 0.9 à 1.0. Il semble que Sets.newConcurrentHashSet() n'est plus disponible. Je l'ai utilisé dans la construction suivante:Quel est le remplacement de Sets.newConcurrentHashSet()?

 
public static <K, V> Multimap<K, V> newConcurrentMultimap() 
{ 
    return Multimaps.newMultimap(new ConcurrentHashMap<K, Collection<V>>(), new Supplier>() 
    { 
     @Override 
     public Collection<V> get() 
     { 
      return Sets.<V>newConcurrentHashSet(); 
     } 
    }); 
} 

Quel serait le meilleur remplacement pour Sets.newConcurrentHashSet()?

Édition: La raison de cette construction est d'avoir un multimap qui est sûr de lire et d'écrire à partir de plusieurs threads. Il est utilisé dans un scénario principalement lu (et sera lu beaucoup).

salutations,

Wim

+0

Comme vous vous noté dans un commentaire ci-dessous, cela ne fait pas ce que vous voulez qu'il fasse de toute façon. –

Répondre

8

Sets.newConcurrentHashSet a été retirée en 1.0rc1 (commit log). Je ne connais pas la raison du retrait, mais vous pouvez utiliser the implementation vous:

Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>()); 
+0

C'est exactement ce que j'ai fait pour le moment. Je me demande simplement s'il fera ce que j'espère puisque les états de javadoc que: "Le multimap n'est pas threadsafe quand des opérations concurrentes mettent à jour le multimap, même si la carte et les instances générées par l'usine sont." Je n'aime pas utiliser le wrapper synchronisé, car cela ne le rend plus concurrent mais synchronisé. –

+1

Vous vous demandez si cela fonctionne parce que le javadoc vous dit spécifiquement que cela ne fonctionne pas? :-) –

+1

Il a été retiré de manière "un pas en arrière, deux pas en avant"; Puisque nous avons prévu de prendre en charge des ensembles simultanés avec une fraction décente des options que vous obtenez pour les cartes avec 'MapMaker', nous ne voulions pas être bloqué avec cette méthode' newConcurrentHashSet' pour l'éternité. Désolé que cette fonctionnalité ne soit pas encore apparue. –

1

Essayez d'utiliser MapMaker puis utilisez newSetFromMap()

Questions connexes