Вопрос по synchronized
От: pva  
Дата: 25.10.23 16:42
Оценка:
Привет,

ревьюил тут код свой и возник вопрос по синхронизации:
    final private LinkedList<Integer> numbers = new LinkedList<>();
...
        synchronized (this.numbers) { // sync on the same instance, w/o special lock
            this.numbers.addAll(other.numbers);
        }
Есть ли разница синхронизироваться на внешнем объекте (как во многих руководствах) или код выше вполне себе допустим?
Есть ли ограничения приведенного выше кода?

Попутно есть еще такой вопрос:
Правильно ли я понимаю что для синхронизированных коллекций, например
    final private LinkedList<Integer> numbers = Collections.synchronizedList(new LinkedList<>());
При использовании коллекции в цикле
    for (Integer number: numbers) ...
коллекция будет лочится на все время цикла для обеспечения целостности итераторов?
Или корректно было бы сделать
    final private LinkedList<Integer> local;
    synchronized(this.lock) { local = new LinkedList<>(this.numbers); }
    for (Integer number: local) ...
?
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.