Cykl życia wątku w Javie
Opublikowany: 2023-01-27Spis treści
Podstawy wątków Java:
Wątek w Javie ułatwia wykonywanie wielu czynności w ramach jednego procesu. Jest uważany za lekki proces. Wątek można również zdefiniować jako sekwencję wykonywanych instrukcji. Każdy wątek w Javie ma swój własny stos, licznik programów i zmienne lokalne. Wątki Java mogą być również zagnieżdżoną serią wywołań metod. Pamięć, stan na proces i pliki są współużytkowane przez wątki.
Zastosowania wątków w Javie:
- Aby wykonać przetwarzanie w tle lub przetwarzanie asynchroniczne
- Aby zwiększyć czułość aplikacji GUI
- Implementacja pozytywnych stron systemów wieloprocesorowych
- Aby usprawnić logikę programowania w przypadku istnienia wielu
Istnieją dwie ścieżki wykonania, gdy wątek jest wywoływany. Jedna z dwóch ścieżek jest używana do wykonywania wątku, a druga śledzi instrukcję następującą po wywołaniu wątku. Każdy wątek w Javie ma oddzielną przestrzeń pamięci i stos.
Czynniki ryzyka napotkane podczas używania wątków w kodach Java są następujące.
- Właściwa koordynacja między wątkami jest wymagana w przypadkach, gdy wątki uzyskują dostęp do wspólnych zmiennych w celu spójnego przeglądania danych.
- Wydajność i utrzymanie wątków, jeśli są nadużywane w programach, staje się trudne.
Cykl życia wątków w Javie:
W każdej chwili wykonywania programu wątki w Javie znajdują się w jednym z poniższych stanów.
- Nowy
- Zablokowany
- Uruchamiany
- Oczekiwanie na czas
- Czekanie
- Zakończony
Szczegółowy widok cyklu życia wątku w Javie
Nowy wątek:
Nowo utworzony wątek jest w stanie „Nowy”. Uruchamianie w tym stanie nie jest kontynuowane. Wykonanie kodu wątku w nowym stanie ma dopiero nastąpić. To jeszcze nie działa.
Stan roboczy:
Wątki w stanie runnable są gotowe do uruchomienia. Wątek w tym stanie może być gotowy do działania w dowolnym momencie lub może już działać. Harmonogram wątków udoskonala odpowiedzialność za przydzielanie czasu na uruchomienie wątku. Każdemu pojedynczemu wątkowi przydzielany jest określony czas w programie wielowątkowym. Każdy pojedynczy wątek działa przez krótki czas, a następnie napotyka pauzę. Procesor jest następnie przekazywany innemu wątkowi, aby dać szansę na uruchomienie innych wątków. W tym momencie wszystkie wątki gotowe do uruchomienia, które czekają na procesor, oraz wątki, które są aktualnie uruchomione, znajdują się w stanie uruchamialnym.
Sprawdź nasze bezpłatne kursy technologiczne, aby uzyskać przewagę nad konkurencją.
Zapoznaj się z naszymi popularnymi kursami inżynierii oprogramowania
Magister informatyki na LJMU i IIITB | Program certyfikacji cyberbezpieczeństwa Caltech CTME |
Bootcamp programistyczny Full Stack | Program PG w Blockchain |
Executive PG Program w Full Stack Development | |
Zobacz wszystkie nasze kursy poniżej | |
Kursy inżynierii oprogramowania |
Stan oczekiwania/zablokowania:
Wątek znajduje się w jednym z poniższych stanów, gdy tymczasowo nie działa.
- Czekanie
- Zablokowany
Wątek oczekujący na zakończenie we/wy jest w stanie zablokowanym. Funkcją harmonogramu wątków jest zaplanowanie wykonania zablokowanego lub oczekującego wątku poprzez jego ponowną aktywację. Żaden wątek w tym stanie nie jest dozwolony do dalszej kontynuacji wykonywania, dopóki nie zostanie przekształcony w stan uruchamialny. Wątki w stanie bloku lub oczekiwania nie używają żadnego cyklu procesora.
Wątek jest zmuszany do zablokowania, gdy próbuje uzyskać dostęp do chronionej sekcji kodu, która jest obecnie chroniona przez inny wątek. Harmonogram przekształca jeden z wątków oczekujących na sekcję chronioną w stan uruchamialny, gdy sekcja jest odblokowana dla wszystkich wątków. Z drugiej strony wątek istnieje w stanie oczekiwania, czekając na inny wątek pod określonym warunkiem. Wątki w stanie oczekiwania są wypychane do stanu umożliwiającego wykonanie, gdy warunek określony dla oczekiwania zostanie spełniony. Jeśli aktualnie działający wątek zostanie przeniesiony do stanu oczekiwania/zablokowania, program planujący wątki planuje uruchomienie innego wątku z możliwej do uruchomienia sekwencji.
Czas oczekiwania:
Gdy metoda jest wywoływana z argumentem limitu czasu, wątek istnieje w stanie oczekiwania na określony czas. Wątek pozostaje w tym stanie aż do zakończenia określonego czasu oczekiwania lub do momentu odebrania powiadomienia. Na przykład wątek jest przesuwany do stanu oczekiwania na określony czas, jeśli wywołuje warunkowe oczekiwanie lub uśpienie.
Stan zakończony:
Zakończenie wątków następuje z jednego z poniższych powodów.
- Normalne wyjście wątku po zakończeniu wykonywania segmentów kodu w wątku.
- Wystąpienie dowolnego rzadkiego błędnego zdarzenia, takiego jak nieobsługiwany wyjątek i błąd segmentacji.
Wątek w stanie zakończonym nie zużywa żadnych cykli procesora.
Ucz się kursów programistycznych online z najlepszych światowych uniwersytetów. Zdobądź programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Umiejętności tworzenia oprogramowania na żądanie
Kursy JavaScript | Podstawowe kursy języka Java | Kursy dotyczące struktur danych |
Kursy Node.js | Kursy SQL | Kursy rozwoju pełnego stosu |
Kursy NTF | Kursy DevOps | Kursy Big Data |
Kursy React.js | Kursy Cyberbezpieczeństwa | Kursy przetwarzania w chmurze |
Kursy projektowania baz danych | Kursy Pythona | Kursy kryptowalut |
Implementacja stanów wątków w Javie:
Aby uzyskać bieżący stan wątku w Javie, używamy metody Thread.getState(). Java oferuje również klasę java.lang.Thread.State, w której zdefiniowane są stałe ENUM dla stanu wątku. Szczegóły podsumowano w poniższej tabeli.
Typ stały | Deklaracja | Opis |
Nowy | public static final Thread.State NOWY | Jest to stan wątku właśnie utworzonego wątku, który jeszcze nie rozpoczął wykonywania. |
Uruchamiany | public static final Thread.State RUNNABLE | Opisuje stan wątku, który jest już uruchomiony lub wątek, który jest w stanie gotowości do uruchomienia. Ten sam wątek może być w stanie uruchamialnym dla maszyny wirtualnej Java i stanie oczekiwania na inne zasoby systemu operacyjnego, takie jak procesor. |
Zablokowany | public static final Thread.State BLOCKED | Opisuje stan wątku, który jest zablokowany w oczekiwaniu na blokadę monitora. Pozostaje w tym samym stanie, dopóki blok monitora nie wejdzie w zsynchronizowaną metodę/blok lub ponownie nie wejdzie w zsynchronizowaną metodę po wywołaniu metody Object.wait(). |
Czekanie | public static final Thread.State OCZEKIWANIE | Opisuje stan wątku oczekującego na wywołanie jednej z poniższych metod.
Stan oczekiwania może być spowodowany zakończeniem określonego zadania przez inny wątek. |
Oczekiwanie na czas | public static final Thread.State TIMED_WAITING | Jest to stan wątku, który czeka przez określony czas. Wywołanie dowolnej z poniższych metod powoduje czasowy stan oczekiwania wątku z przypisanym dodatnim czasem oczekiwania.
|
Zakończony | public static final Wątek. Stan ZAKOŃCZONY | Jest to stan wątku, który zakończył wykonywanie składowych instrukcji kodu. |
Wątek spoczywa w stanie NOWYM, gdy został właśnie utworzony. Gdy metoda .start() jest wywoływana w wątku, program planujący wątki przenosi go do stanu Runnable. Gdy metoda join() jest wywoływana w instancji wątku, wątek, który aktualnie wykonuje instrukcję code, będzie czekał na zakończenie tego wątku. Tak więc, przed wydrukowaniem ostatecznej instrukcji na konsoli, funkcja join() jest wywoływana przez program w wątku 2 i utrzymuje wątek 1 w oczekiwaniu, aż wątek 2 zakończy wykonywanie i przejdzie do stanu zakończenia. Ponieważ wątek 1 czeka na zakończenie wykonywania wątku 2, przechodzi w stan OCZEKIWANIA.
Przeczytaj nasze popularne artykuły związane z tworzeniem oprogramowania
Jak zaimplementować abstrakcję danych w Javie? | Co to jest klasa wewnętrzna w Javie? | Identyfikatory Java: definicja, składnia i przykłady |
Zrozumienie enkapsulacji w OOPS z przykładami | Wyjaśnienie argumentów wiersza poleceń w języku C | 10 najważniejszych funkcji i cech przetwarzania w chmurze w 2022 r |
Polimorfizm w Javie: pojęcia, typy, cechy charakterystyczne i przykłady | Pakiety w Javie i jak z nich korzystać? | Samouczek Git dla początkujących: Naucz się Git od podstaw |
Zalety i ograniczenia używania wątków w programach Java:
Użycie wątków w programach Java ma następujące zalety.
- Skrócenie czasu potrzebnego na opracowanie kodu
- Zmniejszone koszty konserwacji
- Zwiększona wydajność złożonych aplikacji
- Zwiększenie responsywności interfejsów użytkownika
- Paralelizowanie zadań
- Wątki są używane w aplikacjach serwerowych w celu poprawy wysokiej przepustowości i wykorzystania zasobów.
- Jeśli wszystkie zasoby obliczeniowe procesora nie mogą być wykorzystane przez wątek, działanie innego wątku będzie je utrzymywać.
- Jeśli ten sam zestaw danych jest obsługiwany przez kilka wątków, ich pamięć podręczna może być współdzielona. Prowadzi to do lepszego wykorzystania pamięci podręcznej lub ujednolicenia jej wartości.
Istnieje kilka wad używania wątków w programach Java. Niektóre z nich wymieniono poniżej.
- Podczas współdzielenia pamięci podręcznych, buforów translacji (TLB) lub innych zasobów sprzętowych wiele wątków może kolidować ze sobą.
- Nawet jeśli działa tylko jeden wątek, nie można wydłużyć czasu wykonywania wątku. Dopuszczalna jest jednak degradacja czasu wykonania. Może to być spowodowane dodatkowymi stopniami potoku i/lub wolniejszymi częstotliwościami, które są wymagane do dostosowania sprzętu do przełączania wątków.
- Wymagane są liczne zmiany zarówno w systemach operacyjnych, jak i aplikacjach w porównaniu z wieloprocesorowością, ponieważ obsługa sprzętu jest bardziej narażona na oprogramowanie w wielowątkowości.
Jeśli chcesz dowiedzieć się więcej o Javie, pełnym rozwoju oprogramowania, sprawdź program Executive PG PG in Software Development - Specialization in Full Stack Development upGrad & IIIT-B, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznego szkolenia , 9+ projektów i zadań, status absolwenta IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w znalezieniu pracy w najlepszych firmach.