JavaRush /Курсы /Java Multithreading /Мютекс и монитор

Мютекс и монитор

Java Multithreading
6 уровень , 6 лекция
Открыта

— Привет, Амиго!

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

— Я готов слушать.

— Мютекс – это специальный объект для синхронизации нитей/процессов. Он может принимать два состояния – занят и свободен. Если упростить, то мютекс – это boolean-переменная, которая принимает два значения: занят(true) и свободен(false).

Когда нить хочет монопольно владеть некоторым объектом, она помечает его мютекс занятым, а когда закончила работу с ним – помечает его мютекс свободным.

— Т.е. мютекс – это как табличка на двери – занят/свободен?

— Да. И такой мютекс прикреплен к каждому объекту в Java. Прямой доступ к мютексу есть только у Java-машины. От программиста он скрыт.

— А как же тогда его использовать?

— А работать с мютексом в Java можно посредством монитора.

Монитор – это специальный механизм (кусок кода) – надстройка над мютексом, который обеспечивает правильную работу с ним. Ведь мало пометить, что объект – занят, надо еще обеспечить, чтобы другие нити не пробовали воспользоваться занятым объектом.

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

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

1) В начале блока synchronized добавляется код, который отмечает мютекс как занятый.

2) В конце блока synchronized добавляется код, который отмечает мютекс как свободный.

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

Вот как это примерно работает:

Код Как это работает Описание
synchronized(object)
{

object.doJob();

}
while (object.mutex) Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;
Нить спит, пока мютекс занят
(выйдем из цикла, когда мютекс освободится)Помечаем мютекс занятым

Выполняем doJob();

Помечаем мютекс свободным

На самом деле логика там другая и сложнее, но это уже детали.

— А можно подробности?

— Пока не научишься правильно этим пользоваться – в детали лезть нет смысла.

Пару уровней назад я дала тебе список всех состояний нити со стрелками переходов и списком методов, которые влияют на это состояние. Ты много запомнил?

— Не очень. Просто все быстро забывается…

— Чем меньше практики, тем меньше пользы и от теории.

Вот уровню к 40 научишься всем этим пользоваться, и я тебе объясню, как все устроено на самом деле. А пока — учись просто правильно всем пользоваться. Ясно?

— Да, спасибо, Элли.

Комментарии (68)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Алексей Уровень 45
23 ноября 2024
ясно. на 40м все объяснят.
17 декабря 2024
😄
Алексей Уровень 45
24 апреля 2025
объяснили?
SomeBody098 Уровень 51
29 июля 2024
вперед!
Nikolai Уровень 39
26 мая 2024
Чё за бред? Всё это уже было в Java Core на более глубоком уровне, какой смысл от повторяющихся лекций?
Алексей Уровень 45
23 ноября 2024
повторение - мать учения.
Юрій Якимчук Уровень 33
23 февраля 2024
На тебе сынок гитару, учись — Пап, а струны? — Научишся играть, купим струны
Lafaed Уровень 36
11 апреля 2023
В своих предыдущих лекциях я иногда использовала слова «мютекс» и «монитор», теперь настало время рассказать, что же это значит. — Тоесть сначала решаем задачи, а потом разбираемся что же это такое.. Если упростить, то мютекс – это boolean-переменная, которая принимает два значения: занят(true) и свободен(false). — А может это не упростить а сказать как оно есть на самом деле ?.. Пока не научишься правильно этим пользоваться – в детали лезть нет смысла. — Но задачи получим именно на работу с деталями..
Андрей Уровень 42
6 апреля 2023
типа: "не будем работать пока экономика не появится" или "выяснили что данный человек - тот, которого мы искали. теперь надо выяснить кто он". или аналогия с пультом от тв: не надо понимать как он устроен, просто нажми кнопку и смотри телек.
Denis Rogov Уровень 1 Expert
28 февраля 2023
Элли - классная тянка.
Lightselect Уровень 41
25 января 2023
Я на 37 уровне и немного охереваю.... Как я добрался до этого уровня не понимаю, как я решал некоторые задачи тоже иногда не понимаю.... Последнее время приходится вечно гуглить и искать ответы...
Lyokha Blagodatskikh Уровень 48
19 декабря 2022
Даже роботы забывают... что уж обо мне говорить, кто не помнит куда ключи 10 минут назад положил...
proxylunae Уровень 45
4 августа 2022
— Пока не научишься правильно этим пользоваться – в детали лезть нет смысла. 😂