Salut,
Oui, le mot synchronized sert à ça. Tu peux synchroniser les méthodes ou les blocs.
Par exemple, sur les méthodes, tout simplement :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Exemple {
private final List<String> list = new ArrayList<>();
public synchronized void add(String value) {
list.add(value);
}
public synchronized void remove(String value) {
list.remove(value);
}
} |
Par exemple, sur les blocs, tout simplement :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Exemple {
private static final List<String> list = new ArrayList<>();
public static void add(String value) {
synchronized(list) {
list.add(value);
}
}
public static void remove(String value) {
synchronized(list) {
list.remove(value);
}
}
} |
Tu peux également rendre une liste "synchronisée" :
List<String> list = java.util.Collections.synchronizedList(new ArrayList<>());
Attention, toutefois, aux itérations et à certaines boucles de parcours similaires : cette synchronisation n'empêchera pas les risques de "concurrent modification exception", car c'est l'ensemble de la boucle qu'il faut mettre dans un bloc syncrhonisé (il ne doit pas y avoir de modification des éléments de la liste pendant le parcours).
Partager