Wprowadzenie do cyklu życia wątku w Javie

Wątek przechodzi wiele faz w cyklu życia. Takich jak nić przychodzi na świat, zaczyna się, biegnie, a potem przemija. Kolejny schemat wyjaśnia pełny cykl życia nici.

  • Konstruktor wątków tworzy wątek poprzez nowy stan.
  • Wywołanie metody początkowej w wątku może sprawić, że przejdzie ona w stan uruchamiania.
  • Narzędzie do planowania wątków dotyczące Java uruchamia ten wątek po otrzymaniu procesora.
  • Gdy wątek przejdzie do stanu zablokowanego, będzie działał jeszcze raz, ponieważ powróci do stanu umożliwiającego uruchomienie.
  • Jeśli metoda oczekiwania jest określana jako wątek przejdzie do oczekiwania na stan, przejdzie do stanu wykonalnego wkrótce po tym, jak stanie się powiadomieniem w całej Inform, a także powiadomi całą metodę.
  • Wątek kończy się po zakończeniu metody uruchamiania.

Co to jest wątek?

Wątek jest zdefiniowany na poziomie systemu operacyjnego. A język Java, podobnie jak wszystkie inne języki, wykorzystuje, wykorzystuje usługę zapewnianą przez system operacyjny. Z punktu widzenia dewelopera wątek to zestaw instrukcji, które zamierzamy napisać i wykonać w określony sposób naszą aplikację. Sama aplikacja może składać się z kilku wątków. Różne wątki mogą być wykonywane jednocześnie. JVM (Java Virtual Machine) działa z kilkoma wątkami. Istnieją wątki do odśmiecania. Istnieją wątki dla kompilatora Just in Time i innych wątków technicznych.

Stany cyklu życia wątku w Javie

Poniżej znajdują się różne stany cyklu życia wątku w Javie:

1. Nowy: nowy wątek rozpoczyna swój cykl życia w nowym stanie. Pozostaje w tym stanie, zanim program rozpocznie wątek. Ponadto jest znany jako utworzony wątek.

2. Runnable: Po rozpoczęciu niedawno narodzonego wątku, wątek zamienia się w runnable. Wątek o tym stanie jest uważany za wykonujący swój proces.

3. Oczekiwanie: Czasami przejście wątku w kierunku oczekiwania wokół stanu, nawet jeśli wątek czeka na wykonanie innego wątku. Wątek przechodzi w stan umożliwiający uruchomienie tylko wtedy, gdy dodatkowy wątek wskazuje, że wątek oczekujący ma być wykonywany.

4. Oczekiwanie na czas: Uruchomiony wątek może łatwo ustalić konkretny czas oczekiwania na stan, aby uzyskać określony przedział czasu. Wątek z tym stanem przechodzi do stanu wykonalnego po wygaśnięciu tego przedziału czasu lub jeśli wydarzenie, na które naprawdę czeka, wystąpi.

5. Zakończony : uruchamialny wątek przechodzi w stan zakończenia, ponieważ wykonuje swoje zadanie lub kończy działanie.

Jak utworzyć wątek w Javie?

Najbardziej podstawowym sposobem utworzenia wątku w Javie jest użycie Wzorca Runnable. Najpierw musisz utworzyć instancję interfejsu Runnable, co jest bardzo łatwe; jest tylko jedna metoda do wdrożenia. Następnie przekazujemy tę instancję do konstruktora klasy Thread. A następnie wywołujemy metodę start () utworzonego obiektu wątku, aby uruchomić nowy wątek, który uruchomi zadanie opakowane w naszym obiekcie Runnable.

Najpierw tworzymy instancję Runnable. Istnieje tylko jedna metoda do zaimplementowania, która nazywa się metodą run (). Jest to wzorzec Java 7 służący do tego, z instancją klasy anonimowej. Ale możemy również użyć wyrażenia lambda do implementacji Runnable, ponieważ istnieje tylko jedna metoda w interfejsie Runnable.

Utwórzmy wątki na bardzo prostych przykładach

Zobaczymy, co może pójść nie tak z warunkiem wyścigu, który polega na niezsynchronizowanym kodzie, który powinien zostać zsynchronizowany, a my naprawimy nasz kod za pomocą synchronizacji. Ten pierwszy przykład jest bardzo prosty, bardzo prosty. Chodzi tylko o utworzenie zadania.

Wynik:

Zadanie jest instancją interfejsu Runnable, nazwijmy go runnable, a my możemy zaimplementować ten interfejs za pomocą wyrażenia lambda. To zadanie jest przekazywane nowemu wątkowi i wykonywane w kontekście tego wątku. Zamierzamy więc wydrukować nazwę wątku, który wykonuje to zadanie. Pracuję w… Thread.currentThread () to statyczna metoda klasy Thread, która zwraca wątek uruchamiający bieżące zadanie. Musimy po prostu wywołać getName () na tym obiekcie wątku, aby zwrócić nazwę wątku. Następnie po utworzeniu instancji wątku t = nowy wątek. Przekazywanie tej możliwości uruchomienia jako parametru. Więc ten wątek wykona ten fragment kodu. I aby go uruchomić. t.start () jest to metoda start (), którą musimy wywołać. Możemy również podać wyraźną nazwę tego wątku za pomocą t.setName („Mój wątek”). A teraz możemy wykonać ten kod. Teraz zamiast metody call start () wywołujemy metodę run (), a jeśli uruchomimy ten kod, problem polega na tym, że zadanie zostało poprawnie wykonane, ale nie zostało wykonane w utworzonym wątku. Jest wykonywany w głównym wątku, który jest wątkiem wykonującym główną metodę. Dlatego nie należy wywoływać tej metody run (), jeśli chcemy uruchomić nowy wątek.

Wynik:

Metody cyklu życia wątku w Javie

Metody opisane prostym wątkiem są przedstawione w tabeli.

Typy danychNazwy metod wątków
Strunowy

getName ()

Zwróć nazwę tego wątku

intuzyskaj priorytet ()

Zwraca priorytet wątku

booleanżyje()

Sprawdza, czy ten wątek nadal działa

unieważnićPrzystąp()

Oczekuje na śmierć tego wątku (zakończenie)

unieważnićbiegać()

Ilekroć ten wątek był budowany z wykorzystaniem pojedynczego obiektu Runnable, po którym zwykle wywoływana jest metoda run obiektu Runnable; w przeciwnym razie ta metoda nic tak dobrze, jak zwraca. Ilekroć można rozszerzyć klasę wątków, a także metoda run () jest zastępowana podczas podklasy, wówczas wywoływana jest metoda over-ridden run ().

unieważnićsetName ( nazwa ciągu )

Zmienia nazwę tego wątku, aby stała się porównywalna z nazwą argumentu.

statyczna pustka

sleep ( długie millis ) rzuca Przerwane / Wyjątek
Powoduje, że aktualnie wykonywany wątek odpoczywa
wymagana ilość milisekund.
statyczna pustkasleep ( długie millis, int nanos ) zgłasza InterruptedException

Powoduje uśpienie aktualnie wykonanego wątku (zaprzestanie wykonywania) dla wymaganej ilości milisekund, a także dla określonej liczby nanosekund.

unieważnićpoczątek()

Wyzwala te wątki, aby rozpocząć wykonywanie; wirtualna maszyna Java wywołuje metodę uruchamiania tego wątku.

statyczna pustkawydajność()

Wyzwala aktualnie obecny wątek, aby na chwilę zatrzymać i pozwolić na wykonanie dodatkowych wątków.

wątek statycznycurrentThread ()

Zwraca wzmiankę o aktualnie wykonywanym obiekcie wątku.

Wniosek

  • Proste rozpoczęcie używania nici, niezwykle trudne do uchwycenia.
  • Projektowanie klas zawierających metody, które mogą być bezpieczne dla wątków, jest trudne.
  • Przeczytaj: JavaDoc, aby uzyskać klasę java.lang.Thread

Polecany artykuł

To był przewodnik po cyklu życia wątku w Javie. Tutaj omawiamy, co to jest wątek? oraz różne stany cyklu życia wątku wraz z tworzeniem wątków w java. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Frameworki w Javie
  2. Wzory gwiazd w Javie
  3. Scal sortowanie w Javie
  4. Najlepsze kompilatory Java
  5. Metoda statyczna w PHP