Вы уже заплатили (большую часть и с низким уровнем конкуренции) штраф за использование мониторов с помощью Java ... нет смысла их не использовать.В частности, в случае низкой конкуренции они очень дешевы (см. пункты 2.1, 2.2, 2.3 здесь и пункт №1 здесь ), и JVM может полностью оптимизировать их дляколичество случаев.Если вы используете монитор объекта только временно, JVM сделает его «достаточно большим» (что означает, что он начинается с переворачивания битов, может расшириться для простых случаев конфликта до атомарного флага, выделенного стеком, и при постоянном конфликте иметь объектный монитор, выделенный дляэто; все они будут развернуты обратно в дело с низкими накладными расходами, поскольку спор уменьшится), и освободят место позже.Поскольку блокировка этих объектов является «правильной вещью» на стороне приложения, я бы сказал, пойти на это.
Тем не менее, здесь есть дизайнерский запах.Блокировка на многих объектах не звучит здорово.Кроме того, если у вас есть какие-либо условия последовательной блокировки, вы не сможете рассуждать о возможных тупиках.Я предлагаю вам дополнить свой вопрос более подробной информацией о приложении, и мы можем спросить, является ли блокировка большого пула объектов правильным решением.
Эта презентация Дейва Дайса дает некоторую полезностьпонимание того, как работает синхронизация Java6, и эта запись в блоге является сокровищницей информации о синхронизации по Java .Если вы действительно, действительно заботитесь о том, как «большой» полный на структуре objectmonitor есть (вступает в игру в утверждало случае), то код здесь .На внутренней странице HotSpot также есть некоторая хорошая углубленная информация .