Uśpij i czekaj to dwie metody wielowątkowości w Javie. Metoda sleep należy do klasy Thread, podczas gdy metoda wait pochodzi z klasy Object. The kluczowa różnica między snem a oczekiwaniem 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 oczekiwania jest używana do spowodowania, że bieżący wątek będzie czekał, aż inny wątek wywoła metodę notify lub NoticeAll dla obiektu.
Wątek to najmniejsza jednostka przetwarzania w systemie operacyjnym. Jest to pojedynczy sekwencyjny przepływ kontroli w programie. 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. Istnieją metody w Javie, których można używać do wielowątkowości. Dwie z nich śpią i czekają.
1. Przegląd i kluczowa różnica
2. Co to jest sen w Javie
3. Co czeka w Javie
4. Podobieństwa między snem a oczekiwaniem w Javie
5. Porównanie obok siebie - uśpienie vs oczekiwanie w Javie w formie tabelarycznej
6. Podsumowanie
W systemie operacyjnym działa wiele procesów. Proces jest wykonywanym programem. Każdy proces może mieć wiele wątków, a między tymi wątkami występuje przełączanie kontekstu. W Javie istnieją dwa sposoby utworzenia wątku. 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ć implementowany przez każdą klasę, której instancje mają być wykonywane przez wątek. Podczas wykonywania wątku kod, który powinien zostać wykonany, jest zapisywany w metodzie uruchamiania. Wątek, który powinien zostać uruchomiony, jest wybierany przez narzędzie do planowania wątków. Tylko jeden wątek działa w jednym procesie.
Wątek przechodzi przez kilka faz. Po utworzeniu obiektu klasy Thread programiści mogą wywołać metodę start. Przed wywołaniem tej metody mówi się, że wątek jest w nowym stanie. Program do planowania wątków wybiera wątek do uruchomienia. Jeśli wątek nie jest jeszcze wybrany przez program do planowania wątków, ale jeśli wywoływana jest metoda start, oznacza to, że wątek jest w stanie do uruchomienia. Po wybraniu wątku, który ma zostać wykonany, program planujący wątek przechodzi do stanu działania. Jeśli wątek jest żywy, ale obecnie nie można go uruchomić, oznacza to, że nie można go uruchomić ani zablokować. Po zakończeniu metody uruchamiania wątek przechodzi do stanu zakończonego. To są główne fazy cyklu życia nici.
W klasie wątków dostępne są różne metody wykonywania różnych zadań. Metoda uśpienia służy do uśpienia metody przez określony czas. Składnia metody sleep 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 przerwie bieżący wątek, status przerwania bieżącego wątku jest usuwany po zgłoszeniu tego wyjątku.
Rysunek 01: Program Java z metodą uśpienia
Zgodnie z powyższym programem metoda uruchamiania zawiera kod, który należy wykonać. W programie głównym tworzone są dwa obiekty ExampleThread1 i wywoływane są na nich metody startowe. To pozwoli uruchomić kod w metodzie run. Jednocześnie wykonuje się tylko jeden wątek. Z wątkiem. sen (1000); pozwoli pierwszemu wątkowi zakończyć wykonywanie na 1000 milisekund. Gdy wątek śpi, harmonogram wątków przejmuje drugi wątek.
Wiele wątków może uzyskać dostęp do udostępnionego zasobu. Może to spowodować wygenerowanie nieprawidłowego wyniku. Synchronizacji wątków można użyć do uzyskania tylko jednego wątku dostępu do udostępnionego zasobu. Załóżmy, że sytuacja jest następująca. Jeśli istnieją dwa wątki jak t1 i t2, t1 zacznie zapisywać wartości do pliku tekstowego o nazwie Text1.txt. Wartości te zostaną wykorzystane do innych obliczeń po powrocie t1. Jeśli t2 rozpocznie się przed powrotem t1, t2 może zmienić wartości zapisane przez t1. Może to spowodować, że t1 zapewni nieprawidłowe wyjście. Za pomocą synchronizacji, gdy t1 zaczyna korzystać z pliku Text1.txt, plik ten można zablokować, aby był dostępny tylko dla t1. T2 nie może go zmienić, dopóki t1 nie zwolni blokady dostępu do tego pliku tekstowego. Po zakończeniu zadania t1 może zwolnić blokadę. Blokada jest również znana jako monitor.
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 udostępnionych zasobów. W komunikacji między wątkami wątek jest wstrzymywany w swojej krytycznej sekcji, a inny wątek może wejść do tej samej krytycznej sekcji, która ma zostać wykonana. Jest realizowany przy użyciu wszystkich metod oczekiwania, powiadamiania i powiadamiania. Należą do klasy Object. Metoda oczekiwania jest używana, aby umożliwić bieżącemu wątkowi zwolnić blokadę i poczekać, aż inny wątek wywoła metodę powiadomienia lub powiadomienie wszystkich dla obiektu. Metoda powiadomienia służy do wybudzenia pojedynczego wątku, który czeka na blokadę. Powiadomienie Wszystkie budzi wszystkie wątki oczekujące na zamek.
Rysunek 02: Klasa kalkulatora
Rysunek 03: Główna metoda
Klasa Calculator rozszerza wątek. Zsynchronizowany blok znajduje się w metodzie uruchamiania. Metoda pętli i powiadomień znajduje się w zsynchronizowanym bloku. Wewnątrz metody głównej instancja wątku jest tworzona, a metoda startowa jest wywoływana w tej instancji. Główna metoda będzie czekać, aż wątek powiadomi. Podczas wykonywania programu główna metoda czeka na pełne wykonanie metody uruchamiania i oczekuje na metodę notyfikacji. Po wywołaniu metody powiadomień główna metoda przestaje czekać i rozpoczyna wykonywanie pozostałej części kodu. Main czeka na zakończenie wątku kalkulatora. Na koniec drukowany jest wynik sumy.
Jeśli nie ma zsynchronizowanego bloku, a 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. początek ();
System.out.println (t1.sum);
spać vs czekać w Javie | |
Metoda uśpienia powoduje zawieszenie bieżącego wątku na określoną liczbę milisekund, z zastrzeżeniem precyzji i dokładności systemowych zegarów i harmonogramów. | Metoda wait powoduje, że bieżący wątek będzie czekać, aż inny wątek wywoła dla metody metodę replace lub replaceAll. |
Skojarzenie z zamkiem | |
Metoda uśpienia nie zwalnia blokady obiektu podczas synchronizacji. | Metoda oczekiwania zwalnia blokadę podczas synchronizacji. |
Metoda wykonania | |
Metoda uśpienia jest wykonywana dla bieżącego wątku. | Metoda oczekiwania jest wywoływana na obiekcie. |
Skojarzona klasa | |
Sleep jest metodą klasy Thread. | Oczekiwanie jest metodą klasy Object. |
Ukończenie | |
Proces uśpienia jest zakończony po upływie określonego czasu. | Metoda oczekiwania zostaje przerwana przez wywołanie metod notify lub replaceAll. |
W systemie operacyjnym działa wiele procesów. Każdy proces może mieć wiele wątków. Wątek jest najmniejszą jednostką przetwarzania w systemie operacyjnym. Język programowania Java obsługuje wielowątkowość. Pozwala na uruchamianie wielu wątków jednocześnie. Uśpienie i oczekiwanie to dwie metody, których można użyć podczas implementacji wielowątkowości. Różnica między trybem uśpienia i oczekiwania w Javie polega na tym, że tryb uśpienia służy do zawieszenia wykonywania bieżącego wątku na określoną liczbę milisekund, a metoda oczekiwania powoduje, że bieżący wątek będzie czekać, aż inny wątek wywoła powiadomienie lub powiadomienie Wszystkie metoda dla obiektu.
1. „Komunikacja między wątkami w Javie - Javatpoint”.. JavaTPoint. Dostępny tutaj
2). Inter Thread Komunikacja w wielowątkowości Java | Podstawowy samouczek Java | Studytonight. Dostępny tutaj