Wielowątkowość w Javie – ucz się na przykładach
Opublikowany: 2022-06-23Java to język programowania obsługujący programy wielowątkowe. Programy wielowątkowe obsługują dwie lub więcej części (wątków), które działają jednocześnie, obsługując różne zadania, umożliwiając optymalne wykorzystanie procesora. Wielowątkowość to rozszerzenie wielozadaniowości. Wielozadaniowość można zdefiniować jako funkcję, w której wiele procesów współdzieli wspólny zasób przetwarzania, taki jak jednostka centralna.
Wielowątkowość rozszerza koncepcję wielozadaniowości na różne aplikacje, w których zdefiniowane operacje można podzielić na mniejsze, pojedyncze wątki.
Każdy z tych wątków działa jednocześnie i niezależnie z różnymi ścieżkami wykonywania, tak że wyjątek w jednym wątku nie wpływa na wydajność innych.
Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Co to jest wielowątkowość w Javie?
Wielowątkowość w Javie to sytuacja, w której wiele wątków jest wykonywanych jednocześnie, aby zmaksymalizować czas procesora.
Cykl życia wątku
Wątki mają różne etapy swojego cyklu życia. Są to:
- Nowość: wątek rozpoczyna swój cykl życia jako nowy wątek. Pozostaje w tym nowonarodzonym etapie, dopóki program nie uruchomi wątku.
- Runnable: Urodzony wątek wchodzi w fazę uruchamiania, gdy program go inicjuje. Na tym etapie wątek rozpoczyna wykonywanie swojego zadania.
- Oczekiwanie: jest to etap przejściowy, w którym wątek czeka, aż inny wątek zakończy swoje zadanie. Wątek na etapie oczekiwania przełącza się na etap do uruchomienia po otrzymaniu sygnału z innych wątków.
- Oczekiwanie w określonym czasie: jest to etap, do którego wątek, który można uruchomić, może wejść w określonym przedziale czasu. Wątki na tym etapie wracają do etapu, na którym można uruchomić, pod koniec określonego przedziału czasu.
- Dead: To jest ostatni etap cyklu życia wątku. Wątek wchodzi w ten etap po wykonaniu swojego zadania.
Korzyści z wielowątkowości w Javie
- Ponieważ wątki w Javie są niezależne, wielowątkowość Javy nie blokuje użytkowników i mogą wykonywać wiele operacji jednocześnie.
- Ponieważ wielowątkowość w Javie umożliwia wiele operacji, oszczędza czas i jest wydajna.
- Program może działać w sposób ciągły, nawet jeśli jego część zostanie przechwycona.
- Poprawia wydajność w porównaniu z konwencjonalnymi programami równoległymi, które wykorzystują wiele procesów.
- Tworzenie wydajnych programów, które w pełni wykorzystują czas procesora.
- Znacznie poprawia czas reakcji złożonych aplikacji.
- Wymaga mniej zasobów w porównaniu z tradycyjnymi programami równoległymi.
Kolejność priorytetów wątków
System operacyjny określa harmonogram wykonania wątku na podstawie priorytetu wątku. Priorytet wątku jest określany na podstawie wartości jego stałej.
- Stała 1 ma minimalny priorytet (MIN_PRIORITY)
- Stała 5 otrzymuje normalny priorytet ( NORM_PRIORITY)
- Stała 10 otrzymuje maksymalny priorytet (MAX_PRIORITY)
Popularne kursy i artykuły na temat inżynierii oprogramowania
Popularne programy | |||
Program Executive PG w tworzeniu oprogramowania - IIIT B | Program certyfikacji Blockchain - PURDUE | Program Certyfikatów Cyberbezpieczeństwa - PURDUE | MSC w informatyce - IIIT B |
Inne popularne artykuły | |||
Wynagrodzenie Cloud Engineer w USA 2021-22 | Wynagrodzenie architekta rozwiązań AWS w USA | Wynagrodzenie programisty zaplecza w USA | Wynagrodzenie programisty front-end w USA |
Wynagrodzenie programisty w USA | Pytania do rozmowy kwalifikacyjnej Scrum Master w 2022 r. | Jak rozpocząć karierę w cyberbezpieczeństwie w 2022 roku? | Opcje kariery w USA dla studentów inżynierii |
Jak stworzyć wątek w Javie?
Wątki można tworzyć w Javie na dwa sposoby:
- Rozszerzenie klasy wątku
- Implementacja działającego interfejsu
Tworzenie wątku przez rozszerzenie klasy wątku
Poniżej podano kilka metod klasy wątków i ich funkcji.
- getName() : Do uzyskania nazwy wątku
- getPriority(): Aby uzyskać priorytet wątku
- is Alive(): aby sprawdzić, czy wątek jest uruchomiony
- join(): czekaj na zakończenie wątku
- run() : Punkt wejścia wątku
- sleep(): Do zawieszenia wątku na określony czas.
- start() : Aby aktywować wątek poprzez jego metodę run().
Krok 1 : Zastąp metodę run() podaną w klasie wątku. Działa to jako punkt wejścia dla wątku, a cała logika programu powinna być otoczona w 4this.
Składnia metody run() jest następująca:
publiczny pusty przebieg ( )
Krok 2: Zainicjuj obiekt wątku metodą start(), której składnią jest void start() .
Oto przykłady programu wielowątkowego w Javie:
Przykład 1:
class MultithreadingDemo rozszerza Thread{
publiczne void run(){
System.out.println("Mój wątek jest uruchomiony.");
}
public static void main(String args[]){
MultithreadingDemo obj=nowy MultithreadingDemo();
obj.start();
}
}
Wynikiem powyższego programu będzie:
Mój wątek działa.
Przykład 2:
klasa Count rozszerza Thread
{
Liczyć()
{
super("mój wątek się rozszerza");
System.out.println(„mój wątek został utworzony” + ten);
początek();
}
publiczne void run()
{
próbować
{
dla (int i=0 ;i<10;i++)
{
System.out.println("Wydruk licznika" + i);
Wątek.sen(1000);
}
}
catch(InterruptedException e)
{
System.out.println("mój wątek został przerwany");
}
System.out.println("Mój wątek się skończył" );
}
}
klasa ExtendingPrzykład
{
public static void main(String args[])
{
Count cnt = new Count();
próbować
{
while(cnt.istnieje())
{
System.out.println("Główny wątek będzie aktywny, dopóki wątek podrzędny nie będzie żył");
Wątek.sen(1500);
}
}
catch(InterruptedException e)
{
System.out.println("Główny wątek został przerwany");
}
System.out.println("Uruchomienie głównego wątku zostało zakończone" );
}
}
Wynikiem powyższego programu będzie
mój wątek jest utworzonyWątek[mój wątek, który można uruchomić,5,główny]
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 0
Drukowanie licznika 1
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 2
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 3
Drukowanie licznika 4
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 5
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 6
Drukowanie licznika 7
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 8
Główny wątek będzie żywy, dopóki nie ożyje wątek potomny
Drukowanie licznika 9
mój wątek jest zakończony
Główny wątek jest zakończony
Tworzenie wątku poprzez implementację działającego interfejsu
Podczas korzystania z tej metody należy wykonać trzy ważne kroki.
Krok 1 : Metoda run() powinna być zaimplementowana przez uruchamialny interfejs. Ta metoda run() działa jako punkt wejścia dla wątku i powinna zawierać całą logikę programu.
Składnia metody run() to
publiczny pusty przebieg ( )
Krok 2: Obiekt wątku należy aktywować za pomocą konstruktora podanego poniżej.
Thread(Runnable threadObj, String ThreadName);
Tutaj threadObj działa jako klasa, która implementuje uruchamialny interfejs, a nazwa wątku to nazwa nadana nowemu wątkowi.
Krok 3: Po utworzeniu obiektu wątku można go zainicjować metodą start(), która wykonuje metodę run().
Składnia metody start () jest następująca.
nieważny początek();
Przykład tworzenia wątku poprzez implementację działającego interfejsu można znaleźć tutaj .
Aby dowiedzieć się więcej o wielowątkowości Java i tworzeniu oprogramowania, zalecamy zapisanie się na Executive Post Graduate Program in Software Development oferowany przez IIIT Bangalore we współpracy z upGrad.
Executive PG Program in Software Development to 13-miesięczny program online, którego celem jest pomoc pracującym profesjonalistom w zrobieniu gigantycznego skoku w ich karierze poprzez odpowiednie dla branży studia przypadków i projekty. Program obejmuje również ponad dziesięć sesji na żywo prowadzonych przez ekspertów z branży, aby pomóc kandydatom lepiej się uczyć.
Program obejmuje projekty branżowe, aby pomóc kandydatom zdobyć praktyczne doświadczenie i odpowiednią ekspozycję branżową, aby ich nauka była istotna i praktyczna. Ukończenie programu nagrodzi kandydatów pożądanym certyfikatem IIIT B i statusem absolwentów.
Program obejmuje 360-stopniowe wsparcie w zakresie umieszczania od upGrad, które wpłynęło na ponad 40 000 płatnych uczniów ze wszystkich zakątków świata, aby uczynić wszystko jeszcze lepszym. upGrad posiada bazę uczących się z ponad 85 krajów, co zapewnia bezcenną możliwość stworzenia globalnej sieci rówieśniczej dla kandydatów.
Jaka jest różnica między wielozadaniowością a wielowątkowością w Javie?
Wielozadaniowość to proces, w którym wiele zadań może być wykonywanych jednocześnie, a wielowątkowość to proces wykonywania wielu wątków jednocześnie, przy czym każdy wątek wykonuje inne zadanie.
Czy Java obsługuje dziedziczenie wielokrotne?
Język programowania Java obsługuje dziedziczenie wielokrotne, proces, w którym klasa implementuje więcej niż jeden interfejs. Klasa może mieć różne implementacje metody (domyślnej lub statycznej) w interfejsach. Dziedziczenie wielokrotne w Javie można zaimplementować tylko za pomocą interfejsów, a nie klas, w przeciwieństwie do języka C++.
Czy wielowątkowość może poprawić wydajność Javy?
Wielowątkowość poprawia wydajność Javy, umożliwiając wielu procesorom obsługę tego samego problemu. To nie tylko przyspiesza proces, ale także pomaga w skutecznym rozwiązywaniu problemów.