- Wielowątkowość
- Wielozadaniowość
- Wielozadaniowość oparta na procesach
- Wielozadaniowość oparta na wątkach
- 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.
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. |
- 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?
- 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