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