Wyjaśnienie wielowątkowości w Javie [z przykładami]

Opublikowany: 2021-06-15

Spis treści

Wątki w Javie

Wątki w Javie wspomagają efektywne działanie programu. Dwie podstawowe jednostki wykonania proformy to proces i wątki. Proces może być aplikacją, programem lub samodzielnym środowiskiem wykonawczym.

Podczas gdy wątki współdzielą zasób z zasobami procesu i istnieją z nim. W każdej aplikacji Java występuje co najmniej jeden wątek, zwany głównym wątkiem. Z głównego wątku można utworzyć wiele wątków. Dowiedz się więcej o tworzeniu wątku w Javie.

Zalety wątku Java

  • Tworzenie wątku wymaga mniej czasu i zasobów w porównaniu z procesami. Dlatego wątki są również nazywane lekkim procesem.
  • Dane i kod procesu nadrzędnego są współdzielone przez wątki.
  • Komunikacja wewnętrzna między wątkami jest łatwa w porównaniu do komunikacji wewnętrznej w procesie.
  • Wątki w Javie mogą być tworzone poprzez implementację java.lang. Uruchomiony interfejs.

Pojedynczy wątek

W programie występuje kilka jednostek przetwarzających, z których najmniejsza nazywana jest pojedynczym wątkiem. Poprzez użycie „klasy wątków” Java stosuje wątki. Istnieją dwa rodzaje wątków; wątek demona i wątek użytkownika.

Gdy aplikacja ma zostać wyczyszczona, następuje użycie wątku demona. Działa w tle aplikacji. Podczas gdy wątki użytkownika są tworzone przy pierwszym uruchomieniu aplikacji.

Zalety pojedynczego wątku:

  • Narzut aplikacji jest zmniejszony, ponieważ w systemie występuje pojedynczy wątek.
  • Koszt utrzymania aplikacji jest redukowany dzięki zastosowaniu pojedynczych wątków.

Wielozadaniowość w Javie

Wielozadaniowość odnosi się do procesu wykonywania wielu zadań przez procesor jednocześnie. Czasami przełączanie procesora może być wykonywane między zadaniami przez użytkownika w celu wspólnej współpracy z każdym programem. Procesom wielozadaniowym przydzielana jest osobna pamięć i zasoby. Wielozadaniowość można osiągnąć na dwa sposoby.

1. Wielozadaniowość (wielozadaniowość oparta na procesach)

  • Dla każdego procesu przydzielany jest oddzielny obszar pamięci. Dlatego w pamięci znajduje się adres dla każdego procesu.
  • Procesy są ciężkie.
  • Koszt komunikacji między procesami jest wysoki.
  • Potrzeba trochę czasu na przełączanie między procesami. Jest to wymagane do aktualizacji list, map pamięci itp.

2. Wielowątkowość (wielozadaniowość oparta na wątkach)

  • Ten sam adres jest współdzielony przez wątki.
  • Nici są lekkie.
  • Koszt komunikacji między wątkami jest niski.

Co to jest wielowątkowość?

Gdy dwa lub więcej wątków jest wykonywanych w programie jednocześnie, mechanizm jest określany jako wielowątkowość. Pojedynczy proces tworzy wiele wątków, zwiększając moc obliczeniową. Dwie lub więcej części programu są wykonywane w sposób, który prowadzi do maksymalnego wykorzystania procesora.

Wątki nazywane są poszczególnymi częściami programu. Procesy w aplikacji mogą zawierać wiele wątków lub pojedyncze wątki.
Wirtualna maszyna języka Java zezwala na wiele wątków aplikacji. Każdy wątek ma swój własny priorytet. Dlatego pierwszeństwo wykonania mają wątki o wyższym priorytecie niż te, które mają niższy priorytet.

Aby osiągnąć wielozadaniowość, stosuje się zarówno proces wielowątkowości, jak i wieloprocesowości. Ponieważ obszar pamięci współdzielonej jest używany w wielowątkowości, jest on najczęściej używany w przypadku przetwarzania wieloprocesowego. Pamięć jest zapisywana, ponieważ nie jest wymagana dodatkowa alokacja pamięci. Co więcej, czas potrzebny na przetwarzanie jest krótszy niż wieloprocesorowość, ponieważ przełączanie kontekstu odbywa się między wątkami.

W animacji, grach używa się wielowątkowości Java . Kliknij, jeśli chcesz dowiedzieć się więcej o architekturze i komponentach Java.

Do tworzenia wątków można użyć dwóch mechanizmów.

1. Rozszerzenie klasy wątku

2. Implementacja Runnable Interface

Klasa wątku a uruchamialny interfejs

  • Rozszerzenie „klasy wątków” nie może rozszerzyć innych klas, ponieważ wielokrotne dziedziczenie nie jest obsługiwane w Javie. Ale dzięki implementacji interfejsu „Runnable” inne klasy bazowe mogą zostać rozszerzone z tej klasy.
  • Podstawową funkcjonalność wątku można rozszerzyć poprzez rozszerzenie klasy Thread, ponieważ udostępniane są metody wbudowane, takie jak przerwanie(), yield() itp.
  • Obiekt, który może współużytkować wiele wątków, zostanie udostępniony, gdy zostanie użyta opcja runnable.

Klasa Java Thread

Programowanie wątków w Javie jest osiągane przez klasę wątków. Konstruktory są dostarczane przez klasę wątków i metody wykonywania operacji wątków. Klasa wątku implementuje uruchamialny interfejs i rozszerza klasę Object.

Kilka powszechnie stosowanych metod gwintowania to:

  1. start(): wykonywanie wątku jest uruchamiane przez tę metodę. Metoda run() jest wywoływana przez JVM.
  2. sleep(int milliseconds): Wykonywanie wątku jest wstrzymywane na milisekundy, które są dostarczane, gdy proces wątkowania przechodzi w stan uśpienia za pomocą tej metody. Po przerwie wykonanie wątku rozpoczyna się od nowa. Za pomocą tej metody można synchronizować wątki.
  3. getName(): nazwa wątku jest zwracana przez tę metodę.
  4. setPriority(int new priority): Za pomocą tej metody zmieniany jest priorytet wątku.
  5. yield (): Bieżący wątek zostaje zatrzymany wraz z wykonaniem innych wątków tą metodą.
  6. run(): Metoda służy do uruchamiania akcji w wątku.
  7. getPriority(): przy użyciu tej metody zwracany jest priorytet wątku.
  8. setName(): nazwa wątku jest zmieniana za pomocą tej metody.
  9. getId(): identyfikator wątku jest zwracany przez tę metodę.
  10. suspend(): wątek jest zawieszany za pomocą tej metody.

Cykl życia wątku

Cykl życia wątku składa się z różnych etapów, które wymieniono poniżej:

  1. Nowość: „Klasa wątku” służy do tworzenia wątku na tym etapie. Do momentu uruchomienia wątku program pozostaje na tym etapie. Metoda ta nazywana jest również wątkiem zrodzonym.
  2. Runnable: Metoda start wywołuje wystąpienie wątku na tym etapie cyklu życia wątku. Harmonogram otrzymuje kontrolę nad wątkiem w celu zakończenia realizacji. To, czy wątek powinien zostać wykonany, czy nie, zależy od harmonogramu.
  3. Uruchomiony: Po rozpoczęciu wykonywania wątku etap zostaje przesunięty do etapu „uruchamiania”. Jeden wątek jest wybierany przez planistę z puli wątków i rozpoczyna wykonywanie aplikacji.
  4. Oczekiwanie : Jak sama nazwa wskazuje, w tej fazie cyklu życia wątek czeka. Synchronizacja wątków jest niezbędna ze względu na działanie wielu wątków w aplikacji. W związku z tym istnieje konieczność, aby wątek czekał, aż zakończy się wykonanie drugiego wątku. Dlatego etap cyklu życia jest również nazywany etapem oczekiwania.
  5. Martwy: etap, w którym następuje zakończenie wątku, jest określany jako etap „martwy”. Gdy wątek zostanie przeniesiony z działania do końca przetwarzania, zostaje zakończony, a zatem znajduje się w „stanie martwym”

Synchronizacja wątków w Javie

Zachowanie asynchroniczne występuje w programie w przypadku wielowątkowości. Jeśli przypuszczalnie dane są zapisywane przez jeden wątek, a odczytywanie danych odbywa się jednocześnie przez inny wątek, w aplikacji może powstać niespójność.

Zasoby współużytkowane przez wątki muszą być dostępne dla innych wątków. Dlatego w takich przypadkach podchodzi się do podejścia synchronizacji. Zsynchronizowane metody są dostępne w Javie, aby osiągnąć zachowanie synchronizacji.

Gdy wątek dociera do zsynchronizowanego bloku, po osiągnięciu metody nie mogą być wywołane przez inne wątki tego samego obiektu. Dopóki wątek nie zakończy wykonywania bloku i nie wyjdzie z niego, inne wątki muszą się zatrzymać i czekać.

Ucz się kursów oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Zalety wielowątkowości

  • Wiele operacji może być wykonywanych jednocześnie. Przy uruchomionych niezależnych wątkach użytkownik nie jest blokowany.
  • Czas jest oszczędzany, ponieważ wiele operacji jest wykonywanych razem.
  • Na wątek nie może wpływać inny wątek, ponieważ są one niezależne. Wystąpienie wyjątku w jednym wątku nie wpływa na wykonywanie innych wątków.

Przykład wielowątkowości

Przykład programu wielowątkowego w javie pokazano poniżej:

Źródło

Rysunek 1: Fragment przykładowego kodu wielowątkowego

Wyjaśnienie kodu

Linia 3: Klasa „GuruThread1” implementuje runnable.

Linia 8: Wyświetla główną metodę klasy.

Linia 9: tworzona jest instancja klasy wątku, tworzona jest instancja „guruThread1” i tworzony jest wątek.

Linia 10: tworzona jest instancja „klasy wątków” i instancja „guruThread2” oraz wątek.

Linia 11: Wątek o nazwie guruThread1 został uruchomiony.

Linia 12: Wątek o nazwie guruThread2 został uruchomiony.

Linia 13: Wyprowadzany jest tekst „Nazwy wątków są następujące:”.

Linia 14: Metoda getName() służy do pobrania nazwy wątku1.

Linia 15: Metoda getName() służy do pobrania nazwy wątku2.

Wykonanie powyższego kodu skutkuje następującymi danymi wyjściowymi:

Źródło

Rysunek: Zrzut ekranu danych wyjściowych wygenerowanych z programu wielowątkowego w Javie (pobrane z

Wniosek

W artykule omówiono koncepcję wielowątkowości w Javie wraz z przykładem programu wielowątkowego w Javie. Twoja nauka nie kończy się tutaj i dogaduje się ze wszystkimi innymi podstawowymi koncepcjami Javy.

Jeśli jesteś zainteresowany doskonaleniem swoich umiejętności programowania w przyjaznej cenie i przygotowaniem się do pracy w branży, możesz sprawdzić kurs oferowany przez uaktualnienie „Master of Science in Computer Science”. Jest przeznaczony dla wszystkich profesjonalistów średniego szczebla w grupie wiekowej od 21 do 45 lat. Kurs jest certyfikowany przez Liverpool John Moores University i obejmuje ponad 500 godzin nauki, 309 projektów i zadań, aby wydobyć z Ciebie to, co najlepsze. Jeśli masz jakiekolwiek pytania, napisz do nas, nasz zespół skontaktuje się z Tobą.

Wyląduj na swojej wymarzonej pracy

Złóż wniosek o program Executive PG w zakresie rozwoju oprogramowania z IIIT-B