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

У своїх попередніх лекціях я іноді використовувала слова «мютекс» і «монітор», тепер настав час розповісти, що це означає.

— Я ладен слухати.

Мютекс - це спеціальний об'єкт для синхронізації ниток/процесів. Він може приймати два стани – зайнятий та вільний. Якщо спростити, то мютекс – це 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 навчишся всім цим користуватися, і я тобі поясню, як усе влаштовано насправді. А поки що — вчися просто правильно всім користуватися. Ясно?

— Так, дякую, Еллі.