Как мне перебрать подсписок SynchronizedList в Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как мне перебрать подсписок SynchronizedList в Java?

Сообщение Anonymous »

Какую синхронизацию следует использовать для перебора подсписка, возвращенного из SynchronizedList в результате вызова метода subList()?
В документации для Collections.synchronizedList() сказано:

...
Обязательно, чтобы пользователь вручную синхронизировал возвращаемый список при его переборе:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}


Как я понимаю из исходного кода, SynchronizedList может использовать другой мьютекс, отличный от этого. В частности, это происходит, когда SynchronizedList является подсписком. Означает ли это, что в следующем примере используется неправильная синхронизация при условии, что List subList =syncedList.subList(2, 5);? Разве об этом не стоит упомянуть в документации?
synchronized (subList) {
Iterator i = subList.iterator();
while (i.hasNext())
foo(i.next());
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... st-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»