21. Что означает ключевое слово synchronized? Где и для чего может использоваться?

21. Что означает ключевое слово synchronized? Где и для чего может использоваться?

UNKNOWN

В Java монитор реализован с помощью ключевого слова synchronized.

Когда ты пишешь блок synchronized, то компилятор Java заменяет его тремя кусками кода:

  1. В начале блока synchronized добавляется код, который отмечает мютекс как занятый.
  2. В конце блока synchronized добавляется код, который отмечает мютекс как свободный.
  3. Перед блоком synchronized добавляется код, который смотрит, если мютекс занят – то нить должна ждать его освобождения.

Когда ты начинаешь писать код своей нити и в ней обращаешься к различным объектам своей программы, то при вызове каждого метода, ты должен задуматься – а безопасен (thread-safe) ли этот вызов? Все immutable объекты являются thread-safe.

Все объекты, к которым происходит обращение из разных нитей, должны быть thread-safe.

Только методы и блоки могут быть синхронизированы, но не переменные и классы.

Если метод, в котором содержится критически важная «многопоточная» логика статический, синхронизация будет осуществляться по классу.


Предыдущий вопрос: 20. Что такое Фреймворк fork-join? Для чего он нужен?

Следующий вопрос: 22. Что является монитором у статического синхронизированного класса?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page