„Здрасти, Амиго!“
„В предишните си уроци понякога използвах думите „мутекс“ и „монитор“, сега е време да ви кажа 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 работи:“
Код | Как работи | Описание |
---|---|---|
|
|
Нишката спи, докато мутексът е зает Изпълнете doTask(); Маркирайте mutex като свободен |
"В действителност логиката там е различна и по-сложна. Но това са само подробности."
— Мога ли да получа подробности?
"Докато не се научите How да го използвате правилно, няма смисъл да се заплитате в подробностите."
„Няколко нива назад ви дадох списък с всички състояния на нишки със стрелки за преход и списък с методи, които влияят на това състояние. Помните ли много?“
„Не наистина. Просто забравям всичко толкова бързо…“
„Колкото по-малко практикувате, толкова по-малко ще се възползвате от теорията.“
„До ниво 40 ще научите How да използвате всичко това и аз ще ви обясня How всъщност работи всичко това. Междувременно просто се научете да използвате всичко правилно. Разбрахте ли?“
— Да, благодаря ти, Ели.