Ответ 1
Идея здесь в том, что всякий раз, когда вы добавляете или удаляете в CopyOnWriteArrayList
, основной массив в основном копируется с модификацией.
Означает ли это, что будет число копии базового массива равны к числу мутаций Коллекция
Да, для каждого потока, который обновляет ArrayList
, все остальные потоки, содержащие старую копию, по существу будут ссылаться на другой массив.
когда происходят изменения этих отдельные копии переносятся на базовый массив, чтобы другие потоки может видеть их?
Массив, который вы сейчас просматриваете (скажем, ваш итератор), никогда не изменится. Когда вы читаете из массива, вы читаете его, как это было, когда вы начали читать. Если CopyOnWriteArrayList
изменяется другим потоком, массив, который вы сейчас наблюдаете, не будет выполняться.
Чтобы получить самую обновленную версию, прочитайте новый текст как list.iterator();
При этом обновление этой коллекции также приведет к урон производительности. Если вы попытаетесь отсортировать CopyOnWriteArrayList
, вы увидите, что список выбрал UsupportedOperationException
(сортировка вызывает набор в коллекции N раз). Вы должны использовать это чтение только в том случае, если вы читаете 90 +%.