Ничего страшного в этом коде нет, но в целом synchronized в современном коде лучше заменять на Lock-и.
Синхронизации по итератору в synchronizedList нет, поэтому тут юзер должен сам синхронизироваться. В жавадоке в принципе про это почти большими буквами написано. Итерироваться без блокировок по synchronizedList, который может меняться, это просто баг.
В целом это тоже спорный класс и я бы не советовал его использовать. Лучше использовать обычный List и самому блокировки вставлять где надо. Или использовать уже полноценную коллекцию для многопоточности.