"Cześć, Amigo!"

„Na moich poprzednich lekcjach czasami używałem słów„ mutex ”i„ monitor ”, teraz nadszedł czas, aby powiedzieć, co one oznaczają”.

"Zamieniam się w słuch."

Muteks jest specjalnym obiektem do synchronizacji wątków/procesów. Ma dwa możliwe stany: zajęty i wolny. Upraszczając, muteks jest zmienną logiczną, która może mieć dwie wartości: zajęty (prawda) i wolny (fałsz).”

„Kiedy wątek chce przejąć obiekt na własność, oznacza muteks obiektu jako zajęty. A kiedy zakończy pracę z obiektem, oznacza swój muteks jako wolny”.

„Innymi słowy, muteks jest jak znak „zajęty/wolny” na drzwiach?

„Tak. I taki muteks jest powiązany z każdym obiektem w Javie. Tylko maszyna Java ma bezpośredni dostęp do muteksu. Jest on ukryty przed programistą”.

– Jak w takim razie go użyjemy?

„W Javie możemy pracować z muteksem przez monitor”.

„Monitor to specjalny mechanizm (kawałek kodu) nałożony na muteks. Gwarantuje on właściwą interakcję z muteksem. Nie wystarczy oznaczyć obiektu jako zajęty. Nadal konieczne jest upewnienie się, że inne wątki nie próbują użyj zajętego obiektu”.

„W Javie monitory są implementowane przy użyciu słowa kluczowego synchronized”.

„Kiedy piszesz zsynchronizowany blok, kompilator Java zastępuje go trzema fragmentami kodu:”

1) Na początku zsynchronizowanego bloku dodawany jest kod oznaczający muteks jako zajęty.

2)  Na końcu zsynchronizowanego bloku dodawany jest kod oznaczający muteks jako wolny.

3)  Przed zsynchronizowanym blokiem dodawany jest kod, który, jeśli muteks jest zajęty, powoduje, że wątek czeka, aż muteks zostanie zwolniony.

„Oto mniej więcej jak to działa:”

Kod Jak to działa Opis
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Wątek śpi tak długo, jak długo muteks jest zajęty
(wychodzimy z pętli, gdy muteks jest zwolniony). Oznacz muteks jako zajęty.

Wykonaj doTask();

Oznacz muteks jako wolny

„W rzeczywistości logika jest inna i bardziej skomplikowana. Ale to tylko szczegóły”.

– Czy mogę poznać szczegóły?

„Dopóki nie nauczysz się, jak go właściwie używać, nie ma sensu zagłębiać się w szczegóły”.

„Kilka poziomów temu dałem ci listę wszystkich stanów wątków ze strzałkami przejścia i listę metod, które wpływają na ten stan. Dużo pamiętasz?”

- Niezupełnie. Po prostu tak szybko o wszystkim zapominam...

„Im mniej ćwiczysz, tym mniej korzystasz z teorii”.

„Do poziomu 40 nauczysz się, jak tego wszystkiego używać, a ja wyjaśnię, jak to wszystko naprawdę działa. W międzyczasie naucz się tego wszystkiego właściwie używać. Rozumiesz?”

– Tak, dziękuję, Ellie.