List<String> list = Collections.synchronizedList(new ArrayList<String>());
synchronized (list) {
list.add("message");
}
Est le bloc "synchronisée (liste){}" vraiment besoin ici ?
List<String> list = Collections.synchronizedList(new ArrayList<String>());
synchronized (list) {
list.add("message");
}
Est le bloc "synchronisée (liste){}" vraiment besoin ici ?
Vous n'avez pas besoin de synchroniser que vous mettez dans votre exemple. CEPENDANT, très important, vous avez besoin de synchroniser autour de la liste quand vous de le parcourir (comme indiqué dans la Javadoc):
Il est impératif que l'utilisateur de synchroniser manuellement sur la liste retournée lors de l'itération sur elle: Liste liste = Collections.synchronizedList(new ArrayList()); ... synchronisée(liste) { Iterator i = liste.iterator(); // Doit être synchronisé bloc alors que (j'.hasNext()) foo(j'.next()); }
Cela dépend du contenu exact de l' synchronized
bloc:
Si le bloc effectue une seule opération atomique sur la liste (comme dans votre exemple), l' synchronized
est superflu.
Si le bloc effectue plusieurs opérations sur la liste - et le besoin de maintenir le verrou pour la durée de la concession de l'opération , puis l' synchronized
est pas superflu. Un exemple courant de ce est de parcourir la liste.
Lire cette Doc Oracle
Il dit: "Il est impératif que l'utilisateur de synchroniser manuellement sur la liste retournée lors de l'itération sur elle"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.