Моя программа имеет поток рендеринга openGL и поток модификации данных. Поток рендеринга обращается к данным в группе списков ArrayLists, в то время как поток модификации данных изменяет, удаляет и добавляет объекты в списки ArrayLists. Потоки обновляются примерно 60 раз в секунду, и использование ArrayList является узким местом программы. Я пробовал синхронизировать блоки (очень медленно), CopyOnWriteArrayLists (довольно медленно) и создавать буферные списки массивов в потоке рендеринга (меньшее из трех зол). Что самое лучшее способ получить максимальную эффективность от одновременных списков массивов?