2017-01-24 5 views
0

У меня есть одноэлементный класс, содержащий 3 HashMap. Каждый хэш-файл действует как пул. Я помещаю неиспользуемые записи там. Я столкнулся с исключением модификации параллелизма, поэтому планировал реализовать синхронизацию с ними. Моя проблема в том, что если я использую одну и ту же блокировку для всех из них, возможно, возникнет проблема с производительностью. Потому что, когда я создаю запись для этого пула, это происходит через вызов веб-службы. Поскольку мне нужно, чтобы каждый хэш-файл не запускался одновременно, нормально ли создавать 3 блокировки объектов для них?Различные блокировки для одноэлементного класса

+0

«нормально ли создавать 3 блокировки объектов для каждого хэш-карты» - не только нормально, но и необходимо. – Fildor

+0

@Fildor Что случилось с единой общей блокировкой? – shmosel

+0

@ EldonHipolito Вы можете использовать фактические объекты карты как блокировки, если хотите. – shmosel

ответ

2

Я рекомендую вам использовать ConcurrentHashMap.

Таблица внутренне разделена, чтобы попытаться разрешить указанное количество одновременных обновлений без конкуренции.

Постарайтесь настроить производительность с помощью параметра concurrencyLevel.

+1

Тюнинг действительно не должен быть необходим в большинстве случаев @Alexey. Я написал сотни реализаций CHM и никогда не должен был ничего настраивать. – Gray