Доступность методов при синхронизации в Java - PullRequest
1 голос
/ 30 апреля 2019

Предположим, есть четыре метода (m1, m2, m3, m4) и два потока (t1, t2) , теперь я хочу знать ниже -

1. Нестатический корпус:

a) Предположим, все методы синхронизированы, но нестатичны и говорят, что t1 обращается к m1, тогда может ли t2 получить доступ к m2 / m3 / m4?

b) Предположим, что m1 & m2 синхронизированы и m3 & m4 не синхронизированы , все не являются статичными , теперь скажем, что t1 обращается к m1 тогда может ли t2 получить доступ к м2 / м3 / м4?

2. Статический кейс:

a) Предположим, все методы синхронизированы и статичны и говорят, что t1 обращается к m1, тогда может ли t2 обращаться к m2 / m3 / m4?

b) Предположим, все методы являются статическими и m1 & m2 синхронизированы и m3 & m4 не синхронизированы , теперь скажем, t1 обращается к m1, тогда может ли t2 получить доступ к м2 / м3 / м4?

3. Смешанный чехол:

а) м1 & м2 - статический и синхронизированный , м3 и м4 - нестатический и несинхронизированный . Теперь скажите, что t1 обращается к m1, тогда может ли t2 получить доступ к m2 / m3 / m4?

b) m1- статический и синхронизированный , m2- статический и несинхронизированный , m3- нестатический и синхронизированный , m4- нестатический и несинхронизированный . Теперь скажите, что t1 обращается к m1, тогда может ли t2 получить доступ к m2 / m3 / m4?

Может кто-нибудь ответить и объяснить выше? Спасибо!

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Согласно JLS :

Синхронизированный оператор получает блокировку взаимного исключения от имени исполняющего потока, выполняет блок, а затем снимает блокировку. Пока исполняющий поток владеет блокировкой, никакой другой поток не может получить блокировку.

В случае синхронизированного нестатического метода блокировки фиксируется на мониторе, связанном с экземпляром, для которого был вызван метод.

В случае синхронизированного статического метода блокировки фиксируется на мониторе, связанном с объектом Class класса, в котором определяется вызываемый метод.

См. Раздел Синхронизация в JLS.

1 голос
/ 30 апреля 2019

1.
а) №
б) только m3 и m4.
2.
а) №
б) только m3 и m4.
3.
а) Только m3 и m4.
б) Да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...