Kluczowa różnica – sen vs czekanie w Javie
Sleep and wait to dwie metody używane do wielowątkowości w Javie. Metoda sleep należy do klasy Thread, natomiast metoda wait pochodzi z klasy Object. Kluczową różnicą między trybem uśpienia i oczekiwania w Javie jest to, że tryb uśpienia służy do zawieszenia wykonywania bieżącego wątku na określoną liczbę milisekund, podczas gdy metoda wait jest używana do spowodowania, aby bieżący wątek czekał, aż inny wątek wywoła powiadomienie lub Metoda notifyAll dla obiektu.
Wątek to najmniejsza jednostka przetwarzania w systemie operacyjnym. Jest to pojedynczy sekwencyjny przepływ sterowania w ramach programu. Nici są lekkie. Wielowątkowość to mechanizm uruchamiania wielu wątków jednocześnie. Języki programowania, takie jak Java, obsługują wielowątkowość. Wielowątkowość ma zalety, ponieważ pozwala na uruchamianie wielu wątków jednocześnie, a wątki są od siebie niezależne. W Javie istnieją metody, które można wykorzystać do wielowątkowości. Dwóch z nich śpi i czeka.
Co to jest sen w Javie?
W systemie operacyjnym działa wiele procesów. Proces to wykonywany program. Każdy proces może mieć wiele wątków, a między tymi wątkami następuje przełączanie kontekstu. W Javie istnieją dwa sposoby tworzenia wątków. Oznacza to rozszerzenie klasy wątków lub implementację 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ć zaimplementowany przez dowolną 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. Przed wywołaniem tej metody mówi się, że 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 jeśli wywoływana jest metoda start, wątek jest w stanie uruchamialnym. Gdy harmonogram wątków wybierze wątek do wykonania, przechodzi do stanu uruchomionego. Jeśli wątek jest aktywny, ale obecnie nie można go uruchomić, oznacza to, że nie można go uruchomić lub jest zablokowany. Po zakończeniu metody run wątek przechodzi do stanu zakończonego. To są główne fazy cyklu życia wątku.
W klasie wątków dostępne są różne metody wykonywania różnych zadań. Metoda snu służy do spania metodą przez określony czas. Składnia metody uśpienia to public void sleep (długie milisekundy) zgłasza InterruptedException. Powoduje, że aktualnie wykonywany wątek tymczasowo zatrzymuje wykonywanie na określoną liczbę milisekund. Jeśli inny wątek przerywa bieżący wątek, stan przerwania bieżącego wątku jest czyszczony po zgłoszeniu tego wyjątku.
Rysunek 01: Program Java z metodą uśpienia
Zgodnie z powyższym programem, metoda run zawiera kod, który powinien zostać wykonany. W programie głównym tworzone są dwa obiekty ExampleThread1 i wywoływane są na nich metody startowe. To pozwoli na uruchomienie kodu wewnątrz metody run. Tylko jeden wątek jest wykonywany na raz. Z Nicią.sen (1000); pozwoli pierwszemu wątkowi zakończyć wykonywanie przez 1000 milisekund. Gdy wątek jest w stanie uśpienia, harmonogram wątków wybiera inny wątek.
Co to jest czekanie w Javie?
Wiele wątków może uzyskać dostęp do zasobu udostępnionego. Może to spowodować wygenerowanie nieprawidłowego wyjścia. Synchronizacja wątków może służyć do nadawania tylko jednemu wątkowi dostępu do zasobu udostępnionego. Załóżmy następującą sytuację. Jeśli istnieją dwa wątki jako t1 i t2, t1 rozpoczyna zapisywanie wartości do pliku tekstowego o nazwie Text1.txt. Te wartości zostaną użyte do innych obliczeń, gdy zwróci t1. Jeśli t2 rozpocznie się przed powrotem t1, t2 może zmienić wartości zapisane przez t1. Może to spowodować, że t1 będzie dostarczać nieprawidłowe dane wyjściowe. Za pomocą synchronizacji, gdy t1 zacznie używać pliku Text1.txt, plik ten może zostać zablokowany, aby był dostępny tylko dla t1. T2 nie może go zmienić, dopóki t1 nie zwolni blokady, aby uzyskać dostęp do tego pliku tekstowego. Po wykonaniu zadania t1 może zwolnić blokadę. Zamek jest również nazywany 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ędzywątkowej wątek jest wstrzymywany w swojej sekcji krytycznej, a inny wątek może wejść do tej samej sekcji krytycznej w celu wykonania. Realizowany jest za pomocą metod wait, notify i notifyAll. Należą do klasy Object. Metoda wait służy do umożliwienia bieżącego wątku zwolnienia blokady i oczekiwania, aż inny wątek wywoła metodę notyfikacji lub notifyAll dla obiektu. Metoda powiadamiania służy do wybudzenia pojedynczego wątku, który czeka na blokadę. PowiadomienieAll budzi wszystkie wątki, które czekają na blokadę.
Rysunek 02: Klasa kalkulatora
Rysunek 03: Metoda główna
Klasa Calculator rozszerza Wątek. Zsynchronizowany blok znajduje się w metodzie run. Pętla for i metoda notyfikacji znajdują się wewnątrz synchronizowanego bloku. Wewnątrz głównej metody instancja utworzonego wątku i metoda startowa jest wywoływana na tej instancji. Główna metoda będzie czekać, aż wątek wyśle powiadomienie. Podczas wykonywania programu, główna metoda czeka aż do całkowitego wykonania metody run i czeka na metodę notyfikacji. Po wywołaniu metody powiadamiania główna metoda przestaje czekać i rozpoczyna wykonywanie reszty kodu. Main czeka na zakończenie wątku Kalkulatora. Na koniec wynik sumy jest drukowany.
Jeśli nie ma zsynchronizowanego bloku i jeśli główna metoda ma kod jak poniżej, da wynik jako zero, ponieważ nie czeka na zakończenie drugiego wątku.
Kalkulator t1=nowy kalkulator ();
t1. start ();
System.out.println (t1.sum);
Jakie jest podobieństwo między snem a czekaniem w Javie?
Zarówno spanie, jak i czekanie to metody, których można użyć podczas implementacji wielowątkowości w Javie
Jaka jest różnica między snem a czekaniem w Javie?
śpij vs czekaj w Javie |
|
Metoda uśpienia powoduje, że bieżący wątek zawiesza wykonywanie na określoną liczbę milisekund, z zastrzeżeniem precyzji i dokładności liczników systemowych i harmonogramów. | Metoda wait powoduje, że bieżący wątek czeka, aż inny wątek wywoła metodę notyfikacji lub notyfikacjiAll dla obiektu. |
Powiązanie z blokadą | |
Metoda uśpienia nie zwalnia blokady na obiekcie podczas synchronizacji. | Metoda oczekiwania zwalnia blokadę podczas synchronizacji. |
Sposób wykonania | |
Metoda uśpienia jest wykonywana na bieżącym wątku. | Na obiekcie wywoływana jest metoda oczekiwania. |
Klasa powiązana | |
Sen 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 metody 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ść. Pozwala na prowadzenie wielu wątków jednocześnie. Uśpienie i oczekiwanie to dwie metody, które można wykorzystać podczas wdrażania wielowątkowości. Różnica między stanem uśpienia i czekania w Javie polega na tym, że stan 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, aby bieżący wątek czekał, aż inny wątek wywoła powiadomienie lub powiadomienie. metoda dla obiektu.