Неизменяемый объект по определению является потокобезопасным (при условии, что никто не сохраняет ссылки на исходные коллекции), поэтому синхронизация не необходима.
Обтекание внешнего ArrayList с использованием Collections.unmodifiableList ()
предотвращает изменение клиентом своего содержимого (и, таким образом, делает его потоком
безопасно), но внутренние списки ArrayList по-прежнему могут изменяться.
Обтекание внутренних списков ArrayLists с использованием Collections.unmodifiableList ()
предотвращает изменение клиентом их содержимого (и, следовательно, делает их
потокобезопасный), что вам нужно.
Сообщите нам, если это решение вызывает проблемы (накладные расходы, использование памяти и т. Д.);
другие решения могут быть применимы к вашей проблеме. :)
РЕДАКТИРОВАТЬ: Конечно, если списки изменены, они НЕ являются потокобезопасными. Я предполагал, что дальнейшие правки не будут сделаны.