Простыми решениями являются Collections.synchronizedList(list)
или Vector
. Тем не менее, есть ошибка.
Метод iterator()
для синхронизированного списка / Vector
, созданный, как указано выше, НЕ синхронизируется. Так что ничто не мешает потоку попытаться добавить новый элемент в список, если вы копируете его явно с помощью итератора, используя for (type var : list) {...}
или используя конструктор копирования, который опирается на итератор.
Это может привести к одновременным исключениям модификации. Чтобы избежать этой проблемы, вам нужно сделать собственную блокировку.
Возможно, лучше использовать параллельный класс Queue, чтобы потоку, который записывает данные в файл, не приходилось повторять список.