Для пояснения вышесказанного ... утверждение
List<Integer> newList = new ArrayList<>();
... создает структуру данных (list
...), которая впоследствии будет использоваться в блоке кода, который предназначен для защиты lock.readLock().lock();
, но не содержится в нем. Поэтому он не защищен.
Чтобы устранить проблему, объявление newList
не должно включать инициализацию. Ничто, влияющее на предполагаемое значение этой переменной, не должно существовать вне защищенного блокировкой блока.