21. Что означает ключевое слово synchronized? Где и для чего может использоваться?
UNKNOWNВ Java монитор реализован с помощью ключевого слова synchronized.
Когда ты пишешь блок synchronized, то компилятор Java заменяет его тремя кусками кода:
- В начале блока synchronized добавляется код, который отмечает мютекс как занятый.
- В конце блока synchronized добавляется код, который отмечает мютекс как свободный.
- Перед блоком synchronized добавляется код, который смотрит, если мютекс занят – то нить должна ждать его освобождения.
Когда ты начинаешь писать код своей нити и в ней обращаешься к различным объектам своей программы, то при вызове каждого метода, ты должен задуматься – а безопасен (thread-safe) ли этот вызов? Все immutable объекты являются thread-safe.
Все объекты, к которым происходит обращение из разных нитей, должны быть thread-safe.
Только методы и блоки могут быть синхронизированы, но не переменные и классы.
Если метод, в котором содержится критически важная «многопоточная» логика статический, синхронизация будет осуществляться по классу.
Предыдущий вопрос: 20. Что такое Фреймворк fork-join? Для чего он нужен?
Следующий вопрос: 22. Что является монитором у статического синхронизированного класса?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку: напишите мне