1.6 Javadoc на этом не ясно. В чем разница междуВ чем разница между использованием synchronizedCollection и просто синхронизированной (сборкой)?
List l = LinkedList();
synchronized (l) {
l.add... // do some work
l.set...
l.remove...
}
против
List l = LinkedList();
Collection c = Collections.synchronizedCollection (l);
synchronized (c) {
c.add...; c.set....; c.remove...
}
??? Зачем нужен класс synchronizedCollection? Что не так с первым методом?
Но в соответствии с javadoc: если несколько потоков обращаются к связанному списку одновременно, и по крайней мере один из потоков модифицирует список структурно, он должен быть синхронизирован извне. .... ЭТО ТИПИЧНО ПРОИЗОШЛО СИНХРОНИЗИРОВАНИЕ НА НЕКОТОРЫХ ОБЪЕКТАХ, ЧТО ЕСТЕСТВЕННО ЭКСПЕРИРУЕТ СПИСОК. Если такой объект не существует, список должен быть «завернут» с использованием метода Collections.synchronizedList. Итак, вот что я не понимаю, почему javadoc говорит, что синхронизация обычно выполняется на инкапсулирующем объекте, а не на сам связанный объект списка? –
@FaiLau Объект, возвращенный 'synchronizedCollection', является * не * связанным списком. В нем есть связанный список, но это специальный класс, который добавляет свою собственную синхронизацию, прежде чем вызывать фактический список. – dasblinkenlight
ОК, я понял. SyncrhonizedCollection возвращает потокобезопасный фасад в содержащий класс. Но возвращаемый объект является потокобезопасным, а не параллельным. Поэтому, когда используется итератор, объект еще нужно синхронизировать. –