Существует много подводных камней при работе с несколькими потоками и большими наборами данных. Совет избегать изменяемого состояния предназначен для того, чтобы попытаться облегчить вам жизнь, если вам удастся следовать руководящим принципам (то есть, если у вас нет изменяемого состояния, многопоточность будет намного проще).
Если у вас есть большой объем данных, которые необходимо изменить, вы, возможно, не сможете избежать изменяемого состояния. Альтернативой может быть разделение данных на блоки, каждый из которых передается потоку для манипуляции. Блок может быть обработан и затем передан обратно, и контроллер может затем выполнить обновления, где это необходимо. В этом сценарии вы удалили изменяемое состояние из потока.
Если это невозможно, и каждый поток нуждается в обновлении доступа к полному списку (т. Е. Он может обновить любой элемент в списке в любое время), тогда вам будет очень интересно убедиться, что вы получили свой стратегии блокировки и проблемы параллелизма. Я уверен, что есть сценарии, где это требуется, и шаблон проектирования, позволяющий избежать изменяемого состояния, может не применяться.