В многопоточной среде у меня есть Singleton со статическим ArrayList.Обновления Singleton в многопоточной среде
Скажем, один поток получает экземпляр и выполняет цикл «for» в ArrayList. Просто читаю. Нет обновлений. Это может занять некоторое время. Пока это происходит, другой поток обновляет ArrayList.
Что произойдет с петлей (первая нить)? В идеале я бы хотел, чтобы цикл «for» заполнялся «старыми» данными, и если я снова получу экземпляр, то для получения нового набора данных.
Это трюк в этом случае, чтобы не использовать летучие? Или создать новый ArrayList из статического массива ArrayList для цикла for? Или... ?
Есть много ресурсов здесь, на StackOverflow обсуждения этого: http://stackoverflow.com/questions/2715983/concurrent-threads-adding-to-arraylist-at-same- например, время. – jontro
ArrayList не является потокобезопасным. Вам необходимо синхронизировать каждый доступ к списку с предсказуемым поведением или использовать параллельный список (из пакета java.util.concurrent). Я бы сказал, что если вам нужно это спросить, вы не должны заниматься проблемами многопоточности. Многопоточность действительно сложна. Читайте * Java-параллелизм в Практике * Брайана Гетца. –