Потому что вы должны использовать параллельную версию списка адресатов. У вас есть несколько вариантов на выбор, например:
CopyOnWriteArrayList<Integer> destination = new CopyOnWriteArrayList<>();
Изменить этот список дорого, потому что он создает копию базового массива при каждой модификации, но быстро при чтении списка.
Collections.synchronizedList(destination);
Каждый метод синхронизирован, поэтому он будет потокобезопасным