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

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

Открыта

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

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

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

— Мютекс – это специальный объект для синхронизации нитей/процессов. Он может принимать два состояния – занят и свободен. Если упростить, то мютекс – это 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)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей
Уровень 4
23 ноября 2024, 00:07
ясно. на 40м все объяснят.
17 декабря 2024, 19:10
😄
Алексей
Уровень 4
24 апреля 2025, 18:17
объяснили?
SomeBody098веник в бане
29 июля 2024, 16:20
вперед!
Nikolai Backend Developer
26 мая 2024, 23:11
Чё за бред? Всё это уже было в Java Core на более глубоком уровне, какой смысл от повторяющихся лекций?
Алексей
Уровень 4
23 ноября 2024, 00:07
повторение - мать учения.
Юрій Якимчук
Уровень 33
23 февраля 2024, 11:14
На тебе сынок гитару, учись — Пап, а струны? — Научишся играть, купим струны
Lafaed
Уровень 36
11 апреля 2023, 17:24
В своих предыдущих лекциях я иногда использовала слова «мютекс» и «монитор», теперь настало время рассказать, что же это значит. — Тоесть сначала решаем задачи, а потом разбираемся что же это такое.. Если упростить, то мютекс – это boolean-переменная, которая принимает два значения: занят(true) и свободен(false). — А может это не упростить а сказать как оно есть на самом деле ?.. Пока не научишься правильно этим пользоваться – в детали лезть нет смысла. — Но задачи получим именно на работу с деталями..
Андрей
Уровень 42
6 апреля 2023, 08:12
типа: "не будем работать пока экономика не появится" или "выяснили что данный человек - тот, которого мы искали. теперь надо выяснить кто он". или аналогия с пультом от тв: не надо понимать как он устроен, просто нажми кнопку и смотри телек.
Denis Rogov
Уровень 1
Expert
28 февраля 2023, 17:40
Элли - классная тянка.
Lightselect Маркетолог
25 января 2023, 06:38
Я на 37 уровне и немного охереваю.... Как я добрался до этого уровня не понимаю, как я решал некоторые задачи тоже иногда не понимаю.... Последнее время приходится вечно гуглить и искать ответы...
Lyokha Blagodatskikh
Уровень 48
19 декабря 2022, 04:24
Даже роботы забывают... что уж обо мне говорить, кто не помнит куда ключи 10 минут назад положил...
proxylunae
Уровень 45
4 августа 2022, 12:47
— Пока не научишься правильно этим пользоваться – в детали лезть нет смысла. 😂