Я делал:
for (Object key : map.keySet())
    if (something)
        map.remove(key);
который бросил исключение ConcurrentModificationException, поэтому я изменил его на:
for (Object key : new ArrayList<Object>(map.keySet()))
    if (something)
        map.remove(key);
и любые другие процедуры, которые изменяют карту, находятся в синхронизированных блоках.
есть ли лучшее решение?
если никто не придумает лучшего решения, сначала скажем, что не получает галочку;)
