Предположим, что у меня есть следующий класс:
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. Сохраняет ли безопасность потока циклического итератора конкретную итерационную реализацию?
Спасибо.