Предположим, у меня есть следующий класс:
public class Foo {
private List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
private Iterator<Integer> iterator = Iterators.cycle(list);
public void bar(){
Integer value = iterator.next();
doSomethingWithAnInteger(value);
}
}
Если к экземпляру Foo обращаются одновременно два потока, мне нужно, чтобы каждый поток получал другое значение из iterator.next ()
. Нужно ли синхронизировать метод bar ()
? Или iterator.next ()
гарантированно будет поточно-ориентированным?
В этом примере я использую ArrayList в качестве базового Iterable. Зависит ли потокобезопасность циклического итератора от конкретной итерируемой реализации?
Спасибо.