Je ne suis pas sûr de comprendre les listes synchronisées en Java. Supposons que je donne les résultats suivants:Comment fonctionnent les listes synchronisées?
List<Integer> numbers = Collections.synchronizedList(new ArrayList<Integer>());
// Assumption: This is running on a separate thread
public void add() {
numbers.add(new Random().nextInt(100));
}
// This is also running on a separate thread
public void doSomething() {
synchronized(numbers) {
for (int i : numbers) {}
}
}
Fondamentalement, ce que le add()
pouvoir ajouter des numéros à la liste si doSomething()
est invoquée? Que se passerait-il si j'utilisais à la place public synchronized void add()
et public synchronized void doSomething()
?
Je travaille sur un serveur socket UDP, et j'allais stocker les clients dans un ArrayList
. J'aurais plusieurs threads qui peuvent lire, écrire et modifier cette liste. Que devrais-je faire?
Je suis confus; quelqu'un d'autre a dit le contraire. –
@BrandonSmith - J'avais tort et j'ai changé ma réponse. –
@BrandonSmith, cette réponse explique clairement votre comportement de code, puisque les deux opérations sont synchronisées sur le même objet dans les deux cas. – techuser