Toujours à propos de la synchronisation
Encore une petite question. Voici un exemple de classe:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class A {
private Collection<XListener> listeners;
public A() {
listeners = Collections.synchronizedCollection(new ArrayList<XListener>());
}
public void addXListener(XListener listener) {
listeners.add(listener);
}
private void fireX() {
for(XListener listener : listeners)
listener.x();
}
} |
Est-ce que le Collections.synchronizedCollection() garantit que le parcours via l'itérateur (foreach) par un Thread A ne pourra pas se faire "en même temps" que le listener.add() par un Thread B?
Ou alors ça garantit juste que la création de l'itérateur sera synchronisé, mais pas son parcours?