Вы можете делать то, что просите, обновляя содержимое каждого индекса, , но вам не гарантируется , что другие потоки, считывающие данные в индексах, видят текущие данные.
Естьключевое слово в Java, называемое volatile
, которое отмечает переменные экземпляра и класса, чтобы JVM знала, что эти значения должны измениться, и не будет выполнять какую-либо оптимизацию кэша чтения , поскольку потоки чтения могут получить устаревшие данные .Поскольку вы не можете пометить содержимое индекса массива volatile
, другие читатели могут получить устаревшие данные.
Использование raw Arrays
в Java является хорошей практикой только в очень специфических сценариях.Ваш может быть одним из таких случаев, но я не могу сказать из вопроса, поэтому я предлагаю вам взглянуть на java.util.concurrent , в частности CopyOnWriteArrayList и CopyOnWriteArraySet если вам не нужны дубликаты.
По какой-то причине они являются частью стандартной библиотеки, и если вы занимаетесь многопоточностью и совместным использованием данных, вы должны быть как можно ближе знакомы с java.util.concurrent
, насколько это возможно..