Я бы настоятельно рекомендовал использовать ConcurrentHashMap , если вам действительно необходим одновременный доступ к HashMap.Это часть пакета util.concurrent с Java 5+.Он работает намного лучше в многопоточной среде, чем синхронизированные оболочки.
Если у вас нет контроля над тем, как создается карта (возможно, она находится в сторонней библиотеке), вам нужно будет синхронизироватьдоступ, когда вы перебираете его.См. JavaDocs для Collections.synchronizedMap для получения дополнительной информации.Вот пример кода, включенного в документы API.
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}