Jak utworzyć wątek w Javie? | Wielowątkowość w Javie

Opublikowany: 2020-12-29

W tym artykule przyjrzymy się wątkom w Javie i zbadamy mechanizmy, które umożliwiają tworzenie wątków.

Spis treści

Wątek w Javie

Funkcja wątkowości w Javie jest lekkim podprocesem. Uważa się, że jest to najmniejsza jednostka przetwarzania. Jest środkiem do osiągnięcia wielozadaniowości w programie. Jest to przydatna funkcja, jeśli chodzi o gry, animacje itp.

Java ma wbudowaną obsługę tworzenia wątków i wielowątkowości. Jest to sprytne podejście do minimalizowania nieefektywności i ciągnięcia poprzez optymalne wykorzystanie miejsca na procesorze. W Javie można to zrobić na dwa sposoby:

  1. Rozszerz klasę wątku lub
  2. Implementuj uruchamialny interfejs

Gdy więcej niż jeden wątki są wykonywane jednocześnie, nazywa się to wielowątkowością. Zasadniczo pozwala to na jednoczesne działanie wielu części programu, każda część wątku i każdy wątek podąża odrębną ścieżką do wykonania.

Wątki wykorzystują współdzieloną przestrzeń pamięci; pamięć nie jest przydzielana do każdej części, co skutkuje maksymalnym wykorzystaniem procesora. Co więcej, zmiana kontekstów nie zajmuje dużo czasu. Jednak zbyt wiele wątków może zaangażować procesor w przełączanie kontekstu, a wykonanie może zostać opóźnione.

Wątek może istnieć w jednym z następujących sześciu stanów

  1. NOWY – jak tylko wątek zostanie utworzony, istnieje w nowym stanie. Zasadniczo oznacza to, że wątek jeszcze się nie rozpoczął.
  2. URUCHOM – gdy wątek jest wykonywany lub jest w kolejce do wykonania, jest w stanie uruchomionym.
  3. OCZEKUJĄCY – działający wątek jest czasami wstrzymywany lub zawieszany w celu umożliwienia innej aktywności. Wersja wait() lub join() bez limitu czasu może zawiesić wykonywanie wątku. Gdy akcja zostanie wykonana, zawieszony wątek jest wznawiany.
  4. TIMED-WAITING – działający wątek jest czasami tymczasowo zatrzymany lub zawieszony na określony czas. Na przykład, gdy wywoływana jest funkcja sleep().
  5. ZABLOKOWANY – gdy zawieszony wątek Javy nie może pozyskać określonego zasobu, zostaje zablokowany i istnieje w stanie zablokowanym.
  6. ZAKOŃCZONY – gdy wątek zakończył swoje wykonanie, istnieje w stanie zakończonym. Możesz jednak zakończyć wątek w dowolnym momencie.

Dowiedz się więcej o architekturze i komponentach Java.

Korzyści z tworzenia wątku w Javie

Tworzenie wątków ma kilka zalet. Niektóre z nich to

  1. Ponieważ wątki są niezależne, jedno wykonanie nie wpływa na inne, nawet jeśli działają na współdzielonej przestrzeni pamięci. Oznacza to również, że możesz wykonywać więcej niż jedną operację jednocześnie.
  2. Threading jest formą wielozadaniowości i oszczędza czas.
  3. Błąd w jednym wątku nie wpływa na inny.

Jak stworzyć wątek w Javie?

Jak omówiono powyżej, można to zrobić na dwa sposoby: Extend Thread Class lub Implement Runnable Interface

Klasa wątku

W klasie Thread znajdują się konstruktory i metody, które umożliwiają wykonywanie operacji, zarządzanie i śledzenie wątków. Rozszerza klasę Object, która następnie implementuje towarzyszący interfejs Runnable. Konstruktory obecne w klasie wątków to :Thread(), Thread(String name), Thread(Runnable r) i Thread(Runnable r, String name).

Poniżej znajdują się metody i ich opisy

metoda Do czego służy?
początek() Rozpoczyna wykonanie
biegać() Aby uruchomić akcję dla wątku
spać() Usypia wątek na określony czas
Przystąp() Poczekaj, aż kolejny wątek zostanie zakończony
pobierzPriorytet() Aby oznaczyć priorytet danego wątku
Ustaw priorytet() Aby zmienić priorytet danego wątku
pobierzNazwę() Aby zwrócić nazwę wskazanego wątku
zestawNazwa() Aby zmienić nazwę określonego wątku
pobierzId() Aby zwrócić identyfikator danego wątku
żyje() Aby sprawdzić, czy wątek nadal istnieje w każdym ze stanów
dawać() Wstrzymuje wykonywanie obiektu wątku, aby umożliwić działanie innym wątkom
zawieszać() Aby zawiesić dany wątek
wznawianie() Aby wznowić wątek ze stanu zawieszenia
zatrzymać() Aby zatrzymać dany wątek
zniszczyć() Aby zniszczyć grupę wątków i podgrupy
przerwać() Aby spowodować przerwanie wykonywania wątku
jest przerwana () Aby sprawdzić, czy wykonanie danego wątku jest przerwane
przerwany () Aby sprawdzić, czy bieżące wykonywanie wątku jest przerwane
activeCount() Aby zwrócić liczbę aktywnych wątków w grupie wątków
holdLock() Zwraca true wtedy i tylko wtedy, gdy bieżący wątek utrzymuje blokadę monitora na określonym obiekcie.
pobierz stan() Aby określić stan danego wątku
setContextClass Loader() Aby ustawić kontekst ClassLoader
getContextClass Loader() Aby zwrócić kontekst ClassLoader

Aby utworzyć wątek poprzez rozszerzenie klasy Thread, należy najpierw stworzyć klasę rozszerzającą klasę java.lang.Thread. Ta klasa jest zdefiniowana w celu przesłonięcia metody run(). Następnie w nowej klasie tworzony jest obiekt, który następuje poprzez wywołanie metody start() w celu rozpoczęcia wykonywania wątku.

Musisz przeczytać: Programy wzorców w Javie, które powinieneś sprawdzić

Uruchomiony interfejs

To najłatwiejszy sposób na stworzenie wątku. Do zaimplementowania Runnable Interface wymagana jest tylko jedna metoda: run()

Aby to zadeklarować, piszemy

publiczne void run()

Wewnątrz run() przystępujemy do pisania kodu tworzącego nowy wątek.

Zapisz się na kursy inżynierii oprogramowania z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Klasa wątku a uruchamialny interfejs

Klasa wątku uniemożliwia rozszerzenie jakiejkolwiek innej klasy. Dzieje się tak, ponieważ w Javie nie jest możliwe wielokrotne dziedziczenie. Nie dzieje się tak jednak w przypadku implementacji interfejsu Runnable, w którym kontynuujemy rozszerzanie innych klas.

Klasa Extending Thread udostępnia kilka ważnych metod, które zwiększają funkcjonalność wątku. Na przykład yield(), stop(), isalive(), przerwanie(). Interfejs Runnable ma tylko metodę, która jest raczej ograniczająca.

Zawijanie

Jeśli chcesz dowiedzieć się więcej na temat Java, pełnego stosu oprogramowania, sprawdź program Executive PG UpGrad i IIIT-B w zakresie pełnego stosu oprogramowania, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznego szkolenia, 9+ projekty i zadania, status absolwentów IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.

Wyląduj na swojej wymarzonej pracy

Aplikuj teraz na studia magisterskie z inżynierii oprogramowania