У меня есть сомнения относительно параллельной структуры данных в java, а именно:
1) ConcurrentHashMap<String, Integer>
2) HashMap<String, AtomicInteger>
3) ConcurrentHashMap<String, AtomicInteger>
Если я правильно понял:
1) чтение / запись являются потокобезопасными, только один поток может выполнить операцию записи для одной пары (чтение должно быть разрешено для всех потоков), поэтому, если другой поток должен изменить другую пару (отличается от ранее), он должен дождаться получения блокировки.
2) каждый поток может получить доступ к значению AtomicInteger (обязательно для чтения), но два потока могут одновременно изменять разные пары.
3) Я думаю, что с точки зрения логики c то же самое, что и в первом случае
В чем основное отличие трех вышеперечисленных структур данных?
В ситуации с многопоточностью, когда каждый поток должен одновременно включать / декодировать целочисленное значение, какой из них лучше всего выбрать?