Załóżmy, że mam następujące klasy:guava-libraries: czy wątek bezpieczny jest w Iterators.cycle()?
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);
}
}
Jeśli wystąpienie Foo jest acessed jednocześnie przez dwóch wątków, muszę, że każdy wątek dostaje inną wartość od iterator.next()
. Czy metoda bar()
musi być zsynchronizowana? Czy jest gwarantowany bezpieczny wątek w postaci iterator.next()
?
W tym przykładzie używam tablicy ArrayList jako podstawowej wersji Iterable. Czy bezpieczeństwo wątków cyklicznego iteratora zależy od konkretnej iteracyjnej implementacji?
Dziękuję.