J'utiliseEn utilisant synchronizedList avec boucle et ajouter des éléments à l'intérieur il
Collections.synchronizedList(new ArrayList<T>())
partie du code est:
list = Collections.synchronizedList(new ArrayList<T>());
public void add(T arg) {
int i;
synchronized (list) {
for (i = 0; i < list.size(); i++) {
T arg2 = list.get(i);
if (arg2.compareTo(arg) < 0) {
list.add(i, arg);
break;
}
}
Est-il vrai que pour la boucle est réellement en utilisant iterator et donc doit envelopper le pour avec synchronisé?
Est-il thread-sûr à utiliser synchronisé et ajouter à l'intérieur comme je l'ai fait ici? Je suis désolé si ces questions sont très basiques, je suis nouveau sur le sujet et je n'ai pas trouvé de réponses sur internet. Merci!
Oui, vous devez synchroniser la boucle comme vous l'avez fait. Faire des ajouts à l'intérieur de la boucle est thread-safe mais votre liste devrait être immuable pendant la boucle –
Vous pouvez également être intéressé par la lecture de [Pourquoi n'y a-t-il pas de SortedList en Java?] (Https://stackoverflow.com/questions/8725387/why -is-there-no-sortedlist-en-java). –
Aussi: vous n'ajouterez jamais le premier élément à la liste avec cette logique, donc la liste restera vide pour toujours :) –