Мне просто нужно подтверждение, что я правильно понял концепцию блокировок в синхронизированных блоках. Сначала я расскажу, что я понял. Приобретение блокировки объекта означает, что ни один другой поток не может получить доступ к синхронизированному коду класса объекта. В случае синхронизированных методов потоки приобретают блокировку для объекта, используемого для вызова метода (т. Е. Неявно эта ссылка). Это означает, что другие потоки не могут получить доступ к синхронизированному коду класса текущего объекта. Но в случае синхронизированных блоков мы можем указать объект, по которому мы хотим, чтобы поток приобрел блокировку.Замки в синхронизированных блоках
Теперь давайте говорить, что мы синхронизировали блок в методе класса А приобретает блокировку на объект класса B. Таким образом, позволяет сказать, что один поток входит в этот синхронизированный блок и приобрел замок конкретного объекта класса B.
Если какой-либо другой поток использует тот же объект класса B, он не сможет ввести синхронизированный блок в классе A, правильно? А также другие потоки не могут также получить доступ к любому синхронизированному коду в классе B?
А как насчет другого синхронизированного кода в классе A? Поскольку поток приобрел блокировку объекта класса B, другие потоки могут получить доступ к другому синхронизированному коду класса A или нет? Это означает, что на объекте класса А нет блокировки только класса B?
Надеюсь, люди поймут мои вопросы.
Заранее спасибо.
Классы не имеют отношения к классам (за исключением того, что, к сожалению, статические методы, помеченные как синхронизированная блокировка объекта 'Class' - D'oh). Подумайте о блокировках как о другом объекте, который каждый объект несет вокруг окончательной ссылки (это плохой дизайн!), Блокировка объекта не означает, что код, который не беспокоит блокировку, не может получить доступ к полям объекта. –