Объявите массив как volatile
и убедитесь, что он имеет такую область видимости, что он виден всем вашим потокам. Как правило, мне нравится избегать статики, поэтому либо передавайте массив по ссылке, либо настраивайте все свои потоки для запуска методов класса экземпляра, у которого массив определен как поле экземпляра.
Однако я настоятельно призываю вас переосмыслить, что означает «изменчивый доступ» с точки зрения целостности данных. Лучшая практика - НЕ делать то, что вы пытаетесь, без хорошей механики блокировки. Вы можете подумать, что это небольшая проблема, но вы можете оказаться в очень недетерминированной системе, настолько, что ее данные ни в коей мере не надежны.
Допустим, у вас запущено 8 потоков, и все они получат значение из индекса массива, проведут некоторые вычисления, а затем добавят результат обратно в индекс массива. Поток 1 запускается первым и получает значение индекса 0. Затем все потоки 2-7 запускаются и получают одно и то же значение. Поток 1 выполняет свои вычисления, снова получает индекс, чтобы убедиться, что он имеет «последнее» значение, затем пытается обновить значение. Однако другие потоки ожидают эту память, и из-за некоторой реализации планирования, о которой вы ничего не знаете, между тем, как Поток 1 получает индекс (по-прежнему равен нулю) и записывает свой результат, потоки 2-7 ВСЕ записали свои значения. Затем поток 1 записывает свое значение, перезаписывая все, что сделали остальные 7 потоков. Другие 7 потоков, в свою очередь, вероятно, имели аналогичные «расы» друг с другом, так что значение, перезаписанное потоком 1, вероятно, в любом случае перезаписало результаты половины потоков.
Я гарантирую вам, что это поведение НЕ то, что вы хотите, независимо от того, сколько вы думаете, вы можете сойти с рук; это приведет к повреждению данных, что повлияет на другие области системы, и вы будете вынуждены применить надлежащую блокировку.