Для таких случаев у вас есть
java.util.concurrent.ConcurrentHashMap<K,V>
Подробности here.
Короче говоря, ConcurrentHashMap работает, разделяя блоки, которые будут заблокированы независимо, поэтому никакие другие потоки не смогут получить к нему доступ до тех пор, пока работа не будет выполнена (но в то же время к ним можно получить доступ к другим блокам). Размер блока по умолчанию - 16. Подробнее об этом here.
Теперь вы должны понимать размеры карт, чтобы говорить о его заполнении. Размер по умолчанию - 16. Но коэффициент загрузки равен 0,75, это означает, что когда карта будет заполнена на 75%, она изменит размер в два раза по сравнению с предыдущим размером, что означает создание нового массива нового набора ключей, а затем копирование всего на него (когда я говорю новый Set, я имею в виду такую же логику для изменения размера). Теперь, если вы заполните его быстро, это означает, что много копирования и для больших размеров, это занимает много времени, поэтому лучше, чтобы дать ему большой начальный размер в начале, как:
ConcurrentHashMap<String, Object> mp = new ConcurrentHashMapy<>(someLargeSize);
Пусть someLargeSize
быть порядок чего-то, чего вы ожидаете или, по крайней мере, рядом с ним, поэтому вы уменьшаете размер до минимума. Не касайтесь коэффициента нагрузки, он просто снизит производительность, 75% в порядке.
И кстати., Максимальный размер HashMap и ConcurrentHashMap (и HashSet, и ArrayList, или любого массива на основе структуры данных) в Java является 1,073,741,824
, поскольку array[]
находится в фоновом режиме, DS в Java, в основном, только упаковщики со специальными функциями для этого, но я сомневаюсь, что вы когда-либо достигнете этого предела, поскольку для объектов, содержащих некоторые строки или что-то еще, для этого вам нужно много ГБ ОЗУ.
Добавить код Пожалуйста, – Sanjeev
Параллелизм не приведет к заполнению mp withe ob объектов, если нет кода, который явно это делает. Код был бы полезен !!! –
Код очень длинный, он вызывает много методов, передающих mp и ob в качестве параметров, без использования здесь, во всем методе (и вызываемых методах) передаются и используются те же mp и ob. , , – GingerHead