logo

Wielowątkowość w Javie

  1. Wielowątkowość
  2. Wielozadaniowość
  3. Wielozadaniowość oparta na procesach
  4. Wielozadaniowość oparta na wątkach
  5. Co to jest wątek

Wielowątkowość w Jawa to proces jednoczesnego wykonywania wielu wątków.

Wątek to lekki podproces, najmniejsza jednostka przetwarzania. Zarówno wieloprocesorowość, jak i wielowątkowość służą do osiągnięcia wielozadaniowości.

zawiera metodę Java

Jednak zamiast wieloprocesorowego używamy wielowątkowości, ponieważ wątki korzystają z obszaru pamięci współdzielonej. Nie przydzielają oddzielnego obszaru pamięci, więc oszczędzają pamięć, a przełączanie kontekstu między wątkami zajmuje mniej czasu niż proces.

Wielowątkowość Java jest najczęściej używana w grach, animacjach itp.


Zalety wielowątkowości w Javie

1) To nie blokuje użytkownika ponieważ wątki są niezależne i można wykonywać wiele operacji jednocześnie.

2) Ty mogą wykonywać wiele operacji jednocześnie, dzięki czemu oszczędza się czas .

3) Wątki są niezależny , więc nie ma to wpływu na inne wątki, jeśli w jednym wątku wystąpi wyjątek.


Wielozadaniowość

Wielozadaniowość to proces wykonywania wielu zadań jednocześnie. Używamy wielozadaniowości, aby wykorzystać procesor. Wielozadaniowość można osiągnąć na dwa sposoby:

  • Wielozadaniowość oparta na procesach (wieloprocesowość)
  • Wielozadaniowość oparta na wątkach (wielowątkowość)

1) Wielozadaniowość oparta na procesach (wieloprocesowość)

  • Każdy proces ma adres w pamięci. Innymi słowy, każdy proces przydziela oddzielny obszar pamięci.
  • Proces jest ciężki.
  • Koszt komunikacji pomiędzy procesami jest wysoki.
  • Przejście z jednego procesu do drugiego wymaga trochę czasu na zapisanie i załadowanie rejestruje , mapy pamięci, listy aktualizacji itp.

2) Wielozadaniowość oparta na wątkach (wielowątkowość)

  • Wątki korzystają z tej samej przestrzeni adresowej.
  • Nić jest lekka.
  • Koszt komunikacji pomiędzy wątkami jest niski.

Uwaga: dla każdego wątku wymagany jest co najmniej jeden proces.

Co to jest wątek w Javie

Wątek to lekki podproces, najmniejsza jednostka przetwarzania. Jest to osobna ścieżka realizacji.

Wątki są niezależne. Jeśli w jednym wątku wystąpi wyjątek, nie ma to wpływu na inne wątki. Wykorzystuje obszar pamięci współdzielonej.

Wielowątkowość w Javie

Jak pokazano na powyższym rysunku, wewnątrz procesu wykonywany jest wątek. Istnieje przełączanie kontekstu pomiędzy wątkami. W systemie operacyjnym może istnieć wiele procesów, a jeden proces może mieć wiele wątków.

Uwaga: W danym momencie wykonywany jest tylko jeden wątek.

Klasa wątku Java

Java zapewnia Klasa wątku aby osiągnąć programowanie wątków. Klasa wątku zapewnia konstruktorzy oraz metody tworzenia i wykonywania operacji na wątku. Klasa wątku rozszerza się Klasa obiektu i implementuje interfejs Runnable.

Metody wątków w Javie

S.N. Modyfikator i typ metoda Opis
1) próżnia początek() Służy do rozpoczęcia wykonywania wątku.
2) próżnia uruchomić() Służy do wykonania akcji dla wątku.
3) statyczna pustka spać() Usypia wątek przez określony czas.
4) statyczny wątek bieżący wątek() Zwraca referencję do aktualnie wykonywanego obiektu wątku.
5) próżnia dołączyć() Czeka, aż wątek umrze.
6) wew uzyskajPriorytet() Zwraca priorytet wątku.
7) próżnia Ustaw priorytet() Zmienia priorytet wątku.
8) Strunowy pobierzNazwę() Zwraca nazwę wątku.
9) próżnia nazwa_zestawu() Zmienia nazwę wątku.
10) długi pobierzId() Zwraca identyfikator wątku.
jedenaście) wartość logiczna żyje() Sprawdza, czy wątek żyje.
12) statyczna pustka dawać() Powoduje wstrzymanie aktualnie wykonywanego obiektu wątku i tymczasowe zezwolenie innym wątkom.
13) próżnia wstrzymać() Służy do zawieszenia nici.
14) próżnia wznawiać() Służy do wznowienia zawieszonego wątku.
piętnaście) próżnia zatrzymywać się() Służy do zatrzymania wątku.
16) próżnia zniszczyć() Służy do zniszczenia grupy wątków i wszystkich jej podgrup.
17) wartość logiczna isDaemon() Sprawdza, czy wątek jest wątkiem demona.
18) próżnia setDaemon() Oznacza wątek jako demon lub wątek użytkownika.
19) próżnia przerywać() Przerywa wątek.
20) wartość logiczna jest przerwany() Sprawdza, czy wątek został przerwany.
dwadzieścia jeden) statyczna wartość logiczna przerwany() Sprawdza, czy bieżący wątek został przerwany.
22) statyczne wew liczba aktywnych() Zwraca liczbę aktywnych wątków w grupie wątków bieżącego wątku.
23) próżnia sprawdźDostęp() Określa, czy aktualnie uruchomiony wątek ma uprawnienia do modyfikowania wątku.
24) statyczna wartość logiczna przytrzymaj blokadę() Zwraca wartość true wtedy i tylko wtedy, gdy bieżący wątek utrzymuje blokadę monitora na określonym obiekcie.
25) statyczna pustka zrzut stosu() Służy do drukowania śladu stosu bieżącego wątku do standardowego strumienia błędów.
26) Element StackTrace[] getStackTrace() Zwraca tablicę elementów śledzenia stosu reprezentujących zrzut stosu wątku.
27) statyczne wew wyliczać() Służy do kopiowania grupy wątków i jej podgrup każdego aktywnego wątku do określonej tablicy.
28) Stan wątku getState() Służy do zwracania stanu wątku.
29) Grupa wątków getThreadGroup() Służy do zwracania grupy wątków, do której należy ten wątek
30) Strunowy doString() Służy do zwracania ciągu znaków reprezentującego ten wątek, łącznie z nazwą wątku, priorytetem i grupą wątków.
31) próżnia notyfikować() Służy do powiadamiania tylko jednego wątku oczekującego na konkretny obiekt.
32) próżnia powiadom wszystkich() Służy do powiadamiania wszystkich oczekujących wątków danego obiektu.
33) próżnia setContextClassLoader() Ustawia kontekst ClassLoader dla wątku.
3. 4) Moduł ładujący klasy getContextClassLoader() Zwraca kontekst ClassLoader dla wątku.
35) statyczny wątek. UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Zwraca domyślną procedurę obsługi wywoływaną, gdy wątek nagle się kończy z powodu nieprzechwyconego wyjątku.
36) statyczna pustka setDefaultUncaughtExceptionHandler() Ustawia domyślną procedurę obsługi wywoływaną, gdy wątek nagle się kończy z powodu nieprzechwyconego wyjątku.
Czy wiesz
  • Jak wykonać dwa zadania za pomocą dwóch wątków?
  • Jak wykonać wielowątkowość przez anonimową klasę?
  • Co to jest harmonogram wątków i jaka jest różnica między planowaniem z wywłaszczaniem a cięciem czasu?
  • Co się stanie, jeśli założymy wątek dwa razy?
  • Co się stanie, jeśli wywołamy metodę run() zamiast metody start()?
  • Jaki jest cel metody łączenia?
  • Dlaczego JVM kończy wątek demona, jeśli nie pozostały żadne wątki użytkownika?
  • Co to jest hak zamykający?
  • Co to jest zbieranie śmieci?
  • Jaki jest cel metody finalize()?
  • Do czego służy metoda gc()?
  • Co to jest synchronizacja i dlaczego warto korzystać z synchronizacji?
  • Jaka jest różnica między metodą zsynchronizowaną a blokiem zsynchronizowanym?
  • Jakie są dwa sposoby przeprowadzenia synchronizacji statycznej?
  • Co to jest impas i kiedy może wystąpić?
  • Co to jest komunikacja międzywątkowa lub współpraca?
Czego nauczymy się w wielowątkowości
  • Wielowątkowość
  • Cykl życia wątku
  • Dwa sposoby tworzenia wątku
  • Jak wykonywać wiele zadań za pomocą wielu wątków
  • Harmonogram wątków
  • Spanie wątku
  • Czy możemy rozpocząć wątek dwa razy?
  • Co się stanie, jeśli wywołamy metodę run() zamiast metody start()?
  • Dołączanie do wątku
  • Nazywanie wątku
  • Priorytet wątku
  • Wątek Demona
  • Hak wyłączający
  • Zbieranie śmieci
  • Synchronizacja metodą zsynchronizowaną
  • Zsynchronizowany blok
  • Synchronizacja statyczna
  • Impas
  • Komunikacja między wątkami