В примере много вещей, которые отличаются от прозаического вопроса.
Ответ на этот вопрос заключается в том, что к отдельным элементам массива обращаются независимо, поэтому вам не нужна синхронизация, если два потока меняют разные элементы.
Однако модель памяти Java не гарантирует (насколько мне известно), что значение, записанное одним потоком, будет видимым для другого потока, если вы не синхронизируете доступ.
В зависимости от того, чего вы на самом деле пытаетесь достичь, вполне вероятно, что java.util.concurrent
уже имеет класс, который сделает это за вас. И если это не так, я все же рекомендую взглянуть на исходный код ConcurrentHashMap
, поскольку ваш код, похоже, выполняет то же самое, что и для управления хэш-таблицей.