Запись и чтение ссылок всегда являются атомарными, независимо от того, реализованы ли они как 32- или 64-битные значения, так что вы в безопасности там.
Однако работать ГАРАНТИЙНО не потому, что нетне является гарантией того, что реализация ArrayList может не выполнять некоторую служебную работу при получении / установке, даже если длина списка не изменяется.Эта уборка может быть не безопасна.Представьте, например, что вы создаете список массивов и изменяете размер, чтобы никогда не изменять его снова.Неизвестный для вас список массивов откладывает работу, перемещая только несколько элементов из старого резервного массива в новый резервный массив, каждый раз получая / кладя, так что изменение размера выполняется в постоянное время.Набор может поместить значение 0xbeefbabe в новый резервный массив, в то время как параллельное получение передает значение 0xahhhhe11 из старого резервного массива, перезаписывая новое значение.
Также get может "никогда" не увидеть изменение, если достаточно умныйОптимизатор решает использовать агрессивные строки и оптимизировать полученный код.