Проблемы с доступом при синхронизации - PullRequest
1 голос
/ 14 июля 2020

У меня есть некоторые сомнения в синхронизации:

  1. если я сделаю вызов несинхронизированного метода из синхронизированного метода, несинхронизированный метод будет заблокирован или нет, может ли другой метод ( метод экземпляра) по-прежнему имеет доступ к несинхронизированному методу?

  2. если у меня есть блокировка на уровне класса, может ли другой поток одновременно получить доступ к синхронизированным методам экземпляра?

1 Ответ

0 голосов
/ 14 июля 2020
  1. Поток, входящий в метод экземпляра synchronized, получает блокировку объекта (this), но не блокирует весь объект. Это предотвращает одновременный доступ двух потоков к синхронизированным методам (экземплярам), но другие несинхронизированные методы все еще могут выполняться одновременно другими потоками.

  2. Уровень класса lock не позволит потоку войти в какие-либо методы уровня синхронизированного класса (stati c). Метод синхронизированного экземпляра получает блокировку для текущего экземпляра (this). Поскольку это не одни и те же блокировки, методы синхронизированного экземпляра не будут заблокированы.

Хорошее резюме topi c можно найти здесь

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