— Привет, Амиго!
В своих предыдущих лекциях я иногда использовала слова «мютекс» и «монитор», теперь настало время рассказать, что же это значит.
— Я готов слушать.
— Мютекс – это специальный объект для синхронизации нитей/процессов. Он может принимать два состояния – занят и свободен. Если упростить, то мютекс – это boolean-переменная, которая принимает два значения: занят(true) и свободен(false).
Когда нить хочет монопольно владеть некоторым объектом, она помечает его мютекс занятым, а когда закончила работу с ним – помечает его мютекс свободным.
— Т.е. мютекс – это как табличка на двери – занят/свободен?
— Да. И такой мютекс прикреплен к каждому объекту в Java. Прямой доступ к мютексу есть только у Java-машины. От программиста он скрыт.
— А как же тогда его использовать?
— А работать с мютексом в Java можно посредством монитора.
Монитор – это специальный механизм (кусок кода) – надстройка над мютексом, который обеспечивает правильную работу с ним. Ведь мало пометить, что объект – занят, надо еще обеспечить, чтобы другие нити не пробовали воспользоваться занятым объектом.
В Java монитор реализован с помощью ключевого слова synchronized.
Когда ты пишешь блок synchronized, то компилятор Java заменяет его тремя кусками кода:
1) В начале блока synchronized добавляется код, который отмечает мютекс как занятый.
2) В конце блока synchronized добавляется код, который отмечает мютекс как свободный.
3) Перед блоком synchronized добавляется код, который смотрит, если мютекс занят – то нить должна ждать его освобождения.
Вот как это примерно работает:
Код | Как это работает | Описание |
---|---|---|
|
|
Нить спит, пока мютекс занят (выйдем из цикла, когда мютекс освободится)Помечаем мютекс занятым Выполняем doJob(); Помечаем мютекс свободным |
На самом деле логика там другая и сложнее, но это уже детали.
— А можно подробности?
— Пока не научишься правильно этим пользоваться – в детали лезть нет смысла.
Пару уровней назад я дала тебе список всех состояний нити со стрелками переходов и списком методов, которые влияют на это состояние. Ты много запомнил?
— Не очень. Просто все быстро забывается…
— Чем меньше практики, тем меньше пользы и от теории.
Вот уровню к 40 научишься всем этим пользоваться, и я тебе объясню, как все устроено на самом деле. А пока — учись просто правильно всем пользоваться. Ясно?
— Да, спасибо, Элли.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ