В Java и .NET смысл блокировки каждого объекта заключается именно в том, что разработчики языка считали, что было бы полезно использовать сам объект в качестве блокировки; следовательно, также ключевое слово synchronized
в Java.
Если вам нужна более тонкая детализация блокировки, я бы предположил, что вам лучше разделить состояние вашего объекта на несколько объектов, сгруппированных по семантически связанным элементам, и, следовательно, вероятно, также необходимо защитить от одновременного доступа вместе.