„Здрасти, Амиго!“

„В предишните си уроци понякога използвах думите „мутекс“ и „монитор“, сега е време да ви кажа Howво означават те.“

"Целият съм в слух."

" Mutex е специален обект за синхронизиране на нишки/процеси. Той има две възможни състояния: зает и свободен. Опростено казано, mutex е булева променлива, която може да има две стойности: зает (true) и свободен (false)."

„Когато нишка иска да поеме собственост върху обект, тя маркира мутекса на обекта като зает. И когато приключи работата с обекта, маркира мутекса му като свободен.“

„С други думи, mutex е като знак „зает/свободен“ на вратата?“

"Да. И такъв mutex е свързан с всеки обект в Java. Само Java машината има директен достъп до mutex. Той е скрит от програмиста."

— Как да го използваме тогава?

„В Java можем да работим с мютекс през монитор.“

„Мониторът е специален механизъм (част от code), наслоен върху мутекс. Той гарантира правилното взаимодействие с мутекса. Не е достатъчно да маркирате обект като зает. Все още е необходимо да се гарантира, че други нишки не се опитват да използвайте заетия обект."

„В Java мониторите се реализират с помощта на ключовата дума synchronized.“

„Когато пишете синхронизиран блок, компилаторът на Java го замества с три части от code:“

1) В началото на синхронизирания блок се добавя code, който маркира mutex като зает.

2)  В края на синхронизирания блок се добавя code, който маркира mutex като свободен.

3)  Преди синхронизирания блок се добавя code, който, ако мутексът е зает, кара нишката да изчака, докато мутексът бъде освободен.

„Ето приблизително How работи:“

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

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Нишката спи, докато мутексът е зает
(излизаме от цикъла, когато мутексът е освободен). Маркирайте mutex като зает.

Изпълнете doTask();

Маркирайте mutex като свободен

"В действителност логиката там е различна и по-сложна. Но това са само подробности."

— Мога ли да получа подробности?

"Докато не се научите How да го използвате правилно, няма смисъл да се заплитате в подробностите."

„Няколко нива назад ви дадох списък с всички състояния на нишки със стрелки за преход и списък с методи, които влияят на това състояние. Помните ли много?“

„Не наистина. Просто забравям всичко толкова бързо…“

„Колкото по-малко практикувате, толкова по-малко ще се възползвате от теорията.“

„До ниво 40 ще научите How да използвате всичко това и аз ще ви обясня How всъщност работи всичко това. Междувременно просто се научете да използвате всичко правилно. Разбрахте ли?“

— Да, благодаря ти, Ели.