Różnica Między Snem A Oczekiwaniem W Javie

Spisu treści:

Różnica Między Snem A Oczekiwaniem W Javie
Różnica Między Snem A Oczekiwaniem W Javie

Wideo: Różnica Między Snem A Oczekiwaniem W Javie

Wideo: Różnica Między Snem A Oczekiwaniem W Javie
Wideo: Klasy, metody i obiekty w Javie. Słowa kluczowe: void, return oraz static. Programowanie obiektowe. 2024, Listopad
Anonim

Kluczowa różnica - sen vs oczekiwanie w Javie

Uśpij i czekaj to dwie metody używane do wielowątkowości w Javie. Metoda uśpienia należy do klasy Thread, podczas gdy metoda wait pochodzi z klasy Object. Kluczowa różnica między uśpieniem a oczekiwaniem w Javie polega na tym, że tryb uśpienia jest używany do zawieszenia wykonywania bieżącego wątku na określoną liczbę milisekund, podczas gdy metoda wait jest używana do spowodowania, że bieżący wątek zaczeka, aż inny wątek wywoła powiadomienie lub notifyAll metody dla obiektu.

Wątek to najmniejsza jednostka przetwarzania w systemie operacyjnym. Jest to pojedynczy sekwencyjny przepływ sterowania w programie. Wątki są lekkie. Wielowątkowość to mechanizm uruchamiania wielu wątków w tym samym czasie. Języki programowania, takie jak Java, obsługują wielowątkowość. Wielowątkowość ma zalety, ponieważ umożliwia jednoczesne uruchamianie wielu wątków, a wątki są od siebie niezależne. W Javie istnieją metody, których można używać do wielowątkowości. Dwóch z nich śpi i czeka.

ZAWARTOŚĆ

1. Omówienie i kluczowe różnice

2. Co to jest sen w Javie

3. Co to jest oczekiwanie w Javie

4. Podobieństwa między snem a oczekiwaniem w Javie

5. Porównanie obok siebie - sen vs oczekiwanie w Javie w formie tabelarycznej

6. Podsumowanie

Co to jest sen w Javie?

W systemie operacyjnym działa wiele procesów. Proces to program w trakcie. Każdy proces może mieć wiele wątków, a między tymi wątkami zachodzi przełączanie kontekstu. W Javie istnieją dwa sposoby tworzenia wątku. Dzieje się tak przez rozszerzenie klasy wątku lub zaimplementowanie interfejsu Runnable. Klasa Thread zawiera konstruktory i metody do tworzenia i wykonywania operacji na wątku. Klasa Thread rozszerza klasę Object i implementuje interfejs Runnable. Interfejs Runnable powinien być implementowany przez każdą klasę, której instancje mają być wykonywane przez wątek. Gdy wątek jest wykonywany, kod, który powinien zostać wykonany, jest zapisywany w metodzie run. Wątek, który powinien zostać uruchomiony, jest wybierany przez harmonogram wątków. W jednym procesie działa tylko jeden wątek.

Wątek przechodzi przez kilka faz. Po utworzeniu obiektu klasy Thread programista może wywołać metodę start. Mówi się, że przed wywołaniem tej metody wątek jest w nowym stanie. Harmonogram wątków wybiera wątek do uruchomienia. Jeśli wątek nie został jeszcze wybrany przez harmonogram wątków, ale wywoływana jest metoda startowa, wówczas wątek jest w stanie gotowym do uruchomienia. Po wybraniu wątku do wykonania przez harmonogram wątków przechodzi do stanu działania. Jeśli wątek istnieje, ale obecnie nie kwalifikuje się do uruchomienia, oznacza to, że nie można go uruchomić lub jest zablokowany. Po zakończeniu metody run wątek przechodzi do stanu przerwania. To są główne fazy cyklu życia nici.

W klasie wątku dostępne są różne metody służące do wykonywania różnych zadań. Metoda snu służy do usypiania metody na określony czas. Składnia metody uśpienia to publiczne void sleep (długie milisekundy), rzuca InterruptedException. Powoduje tymczasowe zatrzymanie wykonywania aktualnie wykonywanego wątku na określoną liczbę milisekund. Jeśli inny wątek przerwie bieżący wątek, stan przerwania bieżącego wątku zostanie wyczyszczony po zgłoszeniu tego wyjątku.

Różnica między snem a oczekiwaniem w Javie
Różnica między snem a oczekiwaniem w Javie

Rysunek 01: Program Java z metodą uśpienia

Zgodnie z powyższym programem metoda run zawiera kod, który ma zostać wykonany. W programie głównym tworzone są dwa obiekty obiektu ExampleThread1 i wywoływane są na nich metody startowe. Umożliwi to uruchomienie kodu wewnątrz metody run. Jednocześnie wykonywany jest tylko jeden wątek. Z wątkiem. spać (1000); pozwoli pierwszemu wątkowi zakończyć wykonywanie na 1000 milisekund. Gdy wątek śpi, harmonogram wątków przejmuje inny wątek.

Co to jest czekanie w Javie?

Wiele wątków może uzyskać dostęp do udostępnionego zasobu. Może to spowodować wygenerowanie nieprawidłowego wyniku. Synchronizacja wątków może służyć do tworzenia tylko jednego wątku w celu uzyskania dostępu do udostępnionego zasobu. Załóżmy następującą sytuację. Jeśli istnieją dwa wątki jako t1 i t2, t1 zaczyna zapisywać wartości do pliku tekstowego o nazwie Text1.txt. Te wartości zostaną użyte do innych obliczeń, gdy powróci t1. Jeśli t2 rozpoczyna się przed powrotem t1, t2 może zmienić wartości zapisane przez t1. Może to spowodować, że t1 będzie dostarczać nieprawidłowe wyjście. Przy pomocy synchronizacji, gdy t1 zacznie używać pliku Text1.txt, plik ten można zablokować, aby był dostępny tylko dla t1. T2 nie może tego zmienić, dopóki t1 nie zwolni blokady dostępu do tego pliku tekstowego. Po wykonaniu zadania t1 może zwolnić blokadę. Blokada jest również nazywana monitorem.

Synchronizację wątków można osiągnąć poprzez komunikację między wątkami. Sekcja krytyczna to segment kodu, który uzyskuje dostęp do współdzielonych zasobów. W komunikacji między wątkami wątek jest wstrzymywany w swojej sekcji krytycznej, a inny wątek może wejść do tej samej sekcji krytycznej w celu wykonania. Jest zaimplementowany przy użyciu metod wait, notification i notifyAll. Należą do klasy Object. Metoda wait służy do zezwalania bieżącemu wątkowi na zwolnienie blokady i czekanie, aż inny wątek wywoła metodę notification lub notifyAll dla obiektu. Metoda powiadamiania służy do wybudzania pojedynczego wątku, który czeka na blokadę. Powiadomić wszystko budzi wszystkie wątki, które oczekują na blokadę.

Różnica między snem a oczekiwaniem w Java Figure 02
Różnica między snem a oczekiwaniem w Java Figure 02

Rysunek 02: Klasa kalkulatora

Kluczowa różnica między snem a oczekiwaniem w Javie
Kluczowa różnica między snem a oczekiwaniem w Javie

Rysunek 03: Główna metoda

Klasa Calculator rozszerza Thread. Zsynchronizowany blok znajduje się wewnątrz metody run. Pętla for i metoda powiadamiania znajdują się wewnątrz zsynchronizowanego bloku. Wewnątrz metody głównej instancja utworzonego wątku i metoda start jest wywoływana w tej instancji. Główna metoda będzie czekać, aż wątek wyśle powiadomienie. Podczas wykonywania programu główna metoda czeka na całe wykonanie metody run i czeka na metodę notyfikacji. Po wywołaniu metody powiadamiania główna metoda przestaje czekać i rozpoczyna wykonywanie pozostałej części kodu. Główny czeka na zakończenie wątku Kalkulatora. Na koniec drukowany jest wynik sumy.

Jeśli nie ma zsynchronizowanego bloku i jeśli główna metoda ma kod jak poniżej, da wynik jako zero, ponieważ nie oczekuje na zakończenie drugiego wątku.

Kalkulator t1 = nowy Kalkulator ();

t1. początek ();

System.out.println (t1.sum);

Jakie jest podobieństwo między snem a oczekiwaniem w Javie?

Zarówno sleep, jak i wait to metody, których można używać podczas implementowania wielowątkowości w Javie

Jaka jest różnica między snem a oczekiwaniem w Javie?

Porównaj środek artykułu przed tabelą

spać vs czekać w Javie

Metoda uśpienia powoduje, że bieżący wątek wstrzymuje wykonywanie na określoną liczbę milisekund, w zależności od precyzji i dokładności systemowych timerów i harmonogramów. Metoda wait powoduje, że bieżący wątek czeka, aż inny wątek wywoła metodę notify lub notifyAll dla obiektu.
Skojarzenie z zamkiem
Metoda uśpienia nie zwalnia blokady obiektu podczas synchronizacji. Metoda wait zwalnia blokadę podczas synchronizacji.
Metoda wykonania
Metoda uśpienia jest wykonywana w bieżącym wątku. Na obiekcie wywoływana jest metoda wait.
Powiązana klasa
Uśpienie jest metodą klasy Thread. Czekanie jest metodą klasy Object.
Ukończenie
Proces uśpienia jest zakończony po upływie określonego czasu. Metoda wait jest przerywana przez wywołanie metod notify lub notifyAll.

Podsumowanie - sen vs czekanie w Javie

W systemie operacyjnym działa wiele procesów. Każdy proces może mieć wiele wątków. Wątek to najmniejsza jednostka przetwarzania w systemie operacyjnym. Język programowania Java obsługuje wielowątkowość. Umożliwia jednoczesne uruchamianie wielu wątków. Uśpienie i oczekiwanie to dwie metody, których można używać podczas implementowania wielowątkowości. Różnica między usypianiem i oczekiwaniem w Javie polega na tym, że tryb uśpienia jest używany do wstrzymania wykonywania bieżącego wątku na określoną liczbę milisekund, podczas gdy metoda wait jest używana do spowodowania, że bieżący wątek zaczeka, aż inny wątek wywoła powiadomienie lub powiadomienie. metoda dla obiektu.

Zalecane: