Jak radzić sobie z wyjątkiem ConcurrentModificationException

Dostaję wyjątek ConcurrentModificationException od mojego licznika czasu odnowienia. Używam wątku w celu zmniejszenia wartości co sekundę w ten sposób:

public class CoolDownTimer implements Runnable {
    @Override
    public void run() {
        for (String s : playerCooldowns.keySet()) {
            playerCooldowns.put(s, playerCooldowns.get(s) - 20);
            if (playerCooldowns.get(s) <= 0) {
                playerCooldowns.remove(s);
            }
        }
    }

}

Tak więc w każdej sekundzie powinno zmniejszyć się czas odnowienia każdego gracza o 20, ale problem polega na tym, że co kilka godzin otrzymuję CME podczas uruchamiania programu, zwłaszcza gdy wielu ludzi jest online. Jak zrobić to tak, że jeśli nadal modyfikuje listę, poczeka, aż zakończy się bieżąca operacja i stworzy rodzaj kolejki modyfikacji? Dzięki! Oto ślad stosu:

2012-06-18 20:59:05 [WARNING] Task of 'SurvivorsClasses' generated an exception
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:839)
at java.util.HashMap$KeyIterator.next(HashMap.java:874)
at me.zachoooo.survivorclasses.CoolDownManager$CoolDownTimer.run(CoolDownManager.java:13)
at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:126)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:533)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:459)

Linia 13 to początek pętli for ...

questionAnswers(3)

yourAnswerToTheQuestion