Ответ 1
Поведение List.iterator() не определено или не соответствует различным реализациям List.
Для ArrayList, LinkedList, вы можете получить исключение ConcurrentModificationException, если список изменен, когда вы выполняете итерацию по нему. (Это не гарантируется). Во избежание этой проблемы следует использовать synchronizedList() и заблокировать список, итерации по нему.
Для Vector коллекция синхронизируется, но итератор не является потокобезопасным.
Для CopyOnWriteArrayList вы получаете моментальный снимок элементов в списке при вызове iterator(), этот итератор потокобезопасен, и вам не нужно использовать какую-либо блокировку. Примечание: содержимое элементов может измениться.