Programując wątki w języku Java, każdy z Was bez wyjątku musi pojąć jedną bardzo ważną rzecz dotyczącą samego ich usypiania. OK, wiemy już, że za pomocą statycznej metody "sleep" klasy "Thread", możemy oddziaływać na przebieg działania wątku po prostu go opóźniając o podaną liczbę milisekund. Natomiast jest jeden niuans domagający się wyjaśnień. Uśpienie wątku też coś przed nami ukrywa. Serdecznie zapraszam do środka artykułu.

UŚPIENIE WĄTKU DAJE GWARANCJĘ TYLKO OD "JEDNEJ" STRONY

Wspomniana metoda "sleep" staje się głównym bohaterem tego artykułu. Istotnie, pozwala wpłynąć na przebieg rywalizacji dwóch / więcej wątków, przez co w pewien sposób wymusza się pożądaną kolejność wykonywanych zadań. Czyli innymi słowy, wątek nie otrzyma pozwolenia na kontynuowanie swoich czynności dopóki nie upłynie podany przez nas czas w milisekundach. A czy to znaczy również, że zostanie on wyznaczony NATYCHMIAST po upłynięciu podanego czasu? Niekoniecznie!

Może się zdarzyć, że wątek na którego nałożono opóźnienie zareaguje od razu po jego upłynięciu, a może być też tak, że dopiero po sekundzie, po dwóch czy po jeszcze jakimś opóźnieniu. Rozumiecie o co biega? Uśpienie wątku gwarantuje jedynie, że wątek nie będzie miał prawa "przejąć pałeczki" wcześniej niż wyznaczono w parametrze formalnym. Co nie znaczy, że mechanizm zarządzający wątkami przydzieli temu wątkowi prawo do działania zaraz po upłynięciu tego czasu.

Schemat działania usypiania wątku

Usypiany wątek z pewnością pozostaje nieaktywny przez podaną liczbę milisekund, ale może być nieaktywny przez dłuższy czas z powodu różnych czynników.

Powtarzam jeszcze raz: "sleep" zapewni jedynie, że uśpienie wątku NA PEWNO nie będzie krótsze od podanego czasu, ale nie jest powiedziane, że natychmiast dostanie możliwość działania w ramach jakiejś "rekompensaty". Nie bardzo jest możliwym jakoś to zaprezentować na jakimkolwiek programie, gdyż aby ujrzeć wyraźne opóźnienie w wątku, trzeba by mocno obciążyć procesor gigantycznymi zadaniami.


Jaki z tego wniosek do serca? Nie uzależniać działania programu od metody "sleep", gdyż nie można dzięki jej działaniu "nagiąć" do samego końca przewidywalności działania wątków. To mechanizm zarządzający wątkami ukryty w maszynie wirtualnej o tym decyduje ostatecznie. Wyjaśniono uśpienie wątku więc możecie przejść dalej.

PODOBNE ARTYKUŁY