Я новичок в использовании synchronizedLists в Java, и я столкнулся с проблемой - я пытаюсь сделать что-то вроде этого
public void foo(List<String> list) {
List<String> syncList = Collections.synchronizedList(list);
synchronized(syncList) {
Iterator<String> itr = syncList.iterator();
while(itr.hasNext()) {
String s = itr.next();
if(s == null) {
return;
}
doStuff();
}
}
}
Но я заметил, что когда я Запустите этот doStuff (), кажется, не запускается для каждого из ненулевых элементов в списке. Я попытался поэкспериментировать с обменом return на break и continue, и я обнаружил, что doStuff () также не запускается для ненулевых элементов списка с break. При продолжении для ненулевых элементов списка действительно запускается doStuff (), но так как continue просто пропускает следующую итерацию l oop, это делает эту операцию намного дороже, чем нужно.
Почему что происходит, и какой лучший обходной путь?
edit: Забыл добавить, что когда я последовательно запускаю это с return, он работает нормально.