Сообщение Re: Вопрос по synchronized от 25.10.2023 16:58
Изменено 25.10.2023 17:03 GarryIV
Re: Вопрос по synchronized
Здравствуйте, pva, Вы писали:
pva>ревьюил тут код свой и возник вопрос по синхронизации:
pva>
pva>Есть ли ограничения приведенного выше кода?
numbers не публичный так что если ты не отдаешь его наружу (а ты не должен) то нет проблем (в том числе и со стороны "руководств").
pva>Попутно есть еще такой вопрос:
pva>Правильно ли я понимаю что для синхронизированных коллекций, например
pva>
pva>
нет не будет
pva>Или корректно было бы сделать
pva>
оно конечно решит проблему ( как и synchronized (this.numbers) )
но в жабе есть конкурентные коллекции же примерно 100 лет как.
про Collections.synchronizedList забудь вообще.
pva>ревьюил тут код свой и возник вопрос по синхронизации:
pva>
final private LinkedList<Integer> numbers = new LinkedList<>();
pva>...
pva> synchronized (this.numbers) { // sync on the same instance, w/o special lock
pva> this.numbers.addAll(other.numbers);
pva> }
pva>
Есть ли разница синхронизироваться на внешнем объекте (как во многих руководствах) или код выше вполне себе допустим?pva>Есть ли ограничения приведенного выше кода?
numbers не публичный так что если ты не отдаешь его наружу (а ты не должен) то нет проблем (в том числе и со стороны "руководств").
pva>Попутно есть еще такой вопрос:
pva>Правильно ли я понимаю что для синхронизированных коллекций, например
pva>
final private LinkedList<Integer> numbers = Collections.synchronizedList(new LinkedList<>());
При использовании коллекции в циклеpva>
for (Integer number: numbers) ...
коллекция будет лочится на все время цикла для обеспечения целостности итераторов?нет не будет
pva>Или корректно было бы сделать
pva>
pva> final private LinkedList<Integer> local;
pva> synchronized(this.lock) { local = new LinkedList<>(this.numbers); }
pva> for (Integer number: local) ...
pva>
?оно конечно решит проблему ( как и synchronized (this.numbers) )
но в жабе есть конкурентные коллекции же примерно 100 лет как.
про Collections.synchronizedList забудь вообще.
Re: Вопрос по synchronized
Здравствуйте, pva, Вы писали:
pva>ревьюил тут код свой и возник вопрос по синхронизации:
pva>
pva>Есть ли ограничения приведенного выше кода?
numbers не публичный так что если ты не отдаешь его наружу (а ты не должен) то нет проблем (в том числе и со стороны "руководств").
pva>Попутно есть еще такой вопрос:
pva>Правильно ли я понимаю что для синхронизированных коллекций, например
pva>
pva>
нет не будет
pva>Или корректно было бы сделать
pva>
оно конечно решит проблему ( как и synchronized (this.numbers) )
но в жабе есть конкурентные коллекции же примерно 100 лет как в частности CopyOnWriteArrayList примерно вот это и делает.
про Collections.synchronizedList забудь вообще.
pva>ревьюил тут код свой и возник вопрос по синхронизации:
pva>
final private LinkedList<Integer> numbers = new LinkedList<>();
pva>...
pva> synchronized (this.numbers) { // sync on the same instance, w/o special lock
pva> this.numbers.addAll(other.numbers);
pva> }
pva>
Есть ли разница синхронизироваться на внешнем объекте (как во многих руководствах) или код выше вполне себе допустим?pva>Есть ли ограничения приведенного выше кода?
numbers не публичный так что если ты не отдаешь его наружу (а ты не должен) то нет проблем (в том числе и со стороны "руководств").
pva>Попутно есть еще такой вопрос:
pva>Правильно ли я понимаю что для синхронизированных коллекций, например
pva>
final private LinkedList<Integer> numbers = Collections.synchronizedList(new LinkedList<>());
При использовании коллекции в циклеpva>
for (Integer number: numbers) ...
коллекция будет лочится на все время цикла для обеспечения целостности итераторов?нет не будет
pva>Или корректно было бы сделать
pva>
pva> final private LinkedList<Integer> local;
pva> synchronized(this.lock) { local = new LinkedList<>(this.numbers); }
pva> for (Integer number: local) ...
pva>
?оно конечно решит проблему ( как и synchronized (this.numbers) )
но в жабе есть конкурентные коллекции же примерно 100 лет как в частности CopyOnWriteArrayList примерно вот это и делает.
про Collections.synchronizedList забудь вообще.