Скажем, у меня есть массив из тысяч объектов и небольшое количество потоков, которые могут обращаться к каждому из объектов. Я хочу защитить доступ к одному из методов объектов. Самый простой способ - объявить этот метод как synchronized
. Однако это может привести к созданию тысяч мониторов, в зависимости от того, каким образом они будут реализованы. Если бы это был Win32, я бы никогда не создал тысячи объектов ядра, таких как Mutex, но CRITICAL_SECTION могли быть правдоподобными. Мне интересно, что происходит на Java. Учитывая, что вероятность конкуренции низкая, будет ли использование мониторов налагать больше, чем простое количество памяти, которое им требуется? Насколько распространена практика использования такой синхронизации с низкой степенью детализации в Java?
(Есть очевидные обходные пути, такие как использование гораздо меньшего массива объектов синхронизации, к которым будет обращаться с помощью некоторого хэша. Я не ищу практического решения, я ищу прозрение).