Просто чтобы прояснить: объявление метода, синхронизированного в Java, требует, чтобы вызывающая сторона удерживала монитор на объекте , к которому был вызван метод (который является Class
объектом для статических методов).
То, что вы можете «заблокировать метод», вводит в заблуждение, так как вы не блокируете этот метод полностью (один и тот же метод может быть вызван для других объектов экземпляра), и вы блокируете больше , чем этот метод (никакая другая часть кода, для которой требуется монитор целевого объекта, включая другие синхронизированные методы или явное получение его, не может выполняться одновременно).
Синхронизация сложна , и в идеале вам нужно знать о ней больше, чем «несколько вещей», если вы хотите избежать взаимоблокировок и проблем видимости, которые почти никогда не появляются во время тестирования или способствуют отладке. Принятие, возможно, неполного понимания синхронизации на одном языке и попытка перенести ее на другой язык с другими примитивами и, вероятно, с другой моделью памяти - это путь к катастрофе.
Так что, хотя это не тот однострочный ответ, который вы искали, я собираюсь утверждать, что любой однострочный ответ обречен на провал без знания всей экосистемы, чтобы его поддержать. Таким образом, вам следует прочитать хорошую книгу / учебное пособие по синхронизации в C #, а не пытаться перевести ключевое слово Java Experience по ключевому слову.