Pourquoi utiliser une Collections.synchronizedMap
Bonjour,
Je dois créer une classe simulant un cache , pour gérer une hashMap qui contiendra les listes clé=>valeurs venant d'une base, le but c'est de n'acceder à la base qu'une seule fois pour un doublon clé=>valeur.
voila la déclaration de ma map :
Code:
private Map<String, HashMap<String, String>> tabs = (HashMap<String, HashMap<String, String>>) Collections.synchronizedMap( new HashMap<String, HashMap<String, String>>());
Alors ma question c'est de savoir l'intérêt d'une collection synchronisée, quel risque courir si on ne le fait pas.
merci
Besoin de conseils pour choix technique
Merci pour la réponse, pendant qu'on y est j'en profite pour poser une question de conception.
En fait j'ai une grosse table dans ma base, qui ne doit normalement pas bcp être modifiée, mon hashMap de tout à l'heure est censée contenir les informations recupérees une seule fois de la base et disponibles pour toute l'application (une sorte de classe cache).
J'ai donc fait un singleton en synchronisant ma methode d'accès à l'instance unique, ce qui me garantit que mon hashmap ne pourra pas être utilisée par 2 Thread au même moment. voila la déclaration de ma classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public Cache extends AbstractInformation{
private Map<String, HashMap<String, String>> tabGlobal;
private static Cache instanceUnique=null;
private boolean isCacheValid=true;
public Cache()
{
tabGlobal = (HashMap<String, HashMap<String, String>>) Collections.synchronizedMap( new HashMap<String, HashMap<String, String>>());
}
public static synchronized Cache getInstance(){
if(instanceUnique==null){
instanceUnique = new Cache();
}
return instanceUnique;
}
public void method1()
{
}
... |
j'ai quelques questions donc à ce sujet:
Vu que j'ai jamais mis en place ce type de mécanisme:
- je veux savoir s'il y'a des risques de dysfonctionnement ou de pertes de performances, si oui que me proposez vous pour mettre en place ce cache?
-J'ai egalement envie de donner une durée de vie paramétrable à ce cache, un temps au bout duquel je reinitialiserai mon cache, je pense le faire avec le Timer qui après le temps parametré mettra simplement null à ma hashMap
-Vu que la méthode d'accès à l'instance unique est dejà synchronisée, je suppose que toutes les méthodes du singleton n'ont plus à l'être. non?
Désolé pour la longueur du post, je veux juste m'assurer que je sois pas sur le mauvais chemin.
Merci d'avance.