Если у меня есть следующее
private volatile Collection<Integer> ints;
private void myMethod()
{
for ( Integer i : ints )
{
...
}
}
Коллекция ints никогда не изменяется, но вся коллекция может быть заменена другим потоком (так что это неизменяемая коллекция).
Должен ли я копировать переменную ints локально, прежде чем итерировать ее? Я не уверен, что к нему будут обращаться несколько раз. т.е. итерация коллекции, другой поток заменяет коллекцию, код продолжает итерацию, но с новой коллекцией.
РЕДАКТИРОВАТЬ : Этот вопрос имеет отношение к дополнительной информации о том, как foreach работает внутри.