thread sleep thread sleep method java with examples
W tym samouczku omówimy metodę Thread Sleep () w języku Java. Jak działa metoda Thread.Sleep () zobaczymy na przykładach:
Plik java.lang.Thread.sleep (długie milis) metoda to metoda udostępniana przez klasę Thread, która powoduje uśpienie aktualnie uruchomionego wątku. Czas snu określimy jako argument metody snu.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Czego się nauczysz:
Metoda Thread Sleep () w Javie
Klasa Thread języka Java udostępnia dwa warianty metody uśpienia.
Poniżej opisano prototyp obu wariantów metody sleep ().
1) Wariant metody snu nr 1
Prototyp: public static void sleep (long millis) zgłasza InterruptedException
Parametry: millis => czas w milisekundach, przez który śpi wątek.
Wartość zwracana: unieważnić
Rzuty:
- IllegalArgumentException => jeśli milis jest ujemna
- InterruptedException => jeśli jakikolwiek inny wątek przerywa bieżący wątek. Gdy wystąpi ten wyjątek, stan przerwania wątku zostanie wyczyszczony.
Opis: Ta odmiana metody uśpienia powoduje uśpienie bieżącego wątku lub tymczasowe wstrzymanie jego wykonywania na określoną liczbę milisekund (podaną w argumencie metody). Jednak podczas snu wątek nie traci własności monitora ani blokady.
2) Wariant metody snu nr 2
Prototyp: public static void sleep (long millis, int nanos) zgłasza InterruptdException
Parametry:
nazwa systemu operacyjnego w komputerze
- millis => czas w milisekundach, przez jaki wątek musi spać.
- nanos => dodatkowe nanosekundy, przez które nić może spać. Zakres wynosi od 0 do 999999.
Wartość zwracana: unieważnić
Rzuty:
- IllegalArgumentException => jeśli wartość milis jest ujemna lub wartość nanos, jeśli jest poza zakresem.
- InterruptedException => jeśli jakikolwiek inny wątek przerywa bieżący wątek. Stan przerwania wątku jest czyszczony, gdy wystąpi ten wyjątek.
Opis: Ten wariant metody uśpienia powoduje, że wątek wywołuje go w stan uśpienia lub tymczasowo wstrzymuje jego wykonywanie na określoną liczbę milisekund. (pierwszy argument w wywołaniu metody). Poza tym podał również liczbę nanosekund (drugi argument w wywołaniu metody) na sen.
Należy pamiętać, że dokładność i precyzja podanego czasu zależy od timerów systemowych i harmonogramów. Gdy wątek śpi, własność zamka lub monitora nie ulega zmianie.
Praca z metodą Thread.Sleep
Za każdym razem, gdy wątek jest uśpiony lub zawieszony, robi to planista. Metoda Thread.sleep () komunikuje się z programem planującym wątki, dzięki czemu harmonogram może spowodować zmianę aktualnie uruchomionego wątku w celu oczekiwania na stan przez określony czas.
Po upływie określonego czasu stan wątku jest zmieniany na „runnable”, dzięki czemu może on czekać na wykonanie przez procesor CPU.
Zatem czas, przez jaki wątek śpi, zależy od harmonogramu, a nie od metody. Ponieważ program planujący jest częścią systemu operacyjnego, architektura systemu operacyjnego również odgrywa rolę w zmianach stanu wątku.
Po szczegółowym zapoznaniu się z metodą Thread.sleep () powinniśmy pamiętać o niektórych kwestiach podczas korzystania z tej metody.
Wskaźniki obejmują:
# 1) Thread.sleep () zawsze wstrzymuje wykonanie bieżącego wątku.
#dwa) Rzeczywisty czas uśpienia wątku zależy od harmonogramów i zegarów systemowych.
Na przykład, w przypadku bardzo obciążonego systemu czas uśpienia wątku może być dłuższy niż określony, natomiast w przypadku systemu, który nie jest tak obciążony, może być mniej więcej zbliżony do określonego czasu.
# 3) Podczas snu nić nie traci żadnych blokad ani monitorów, które nabyła przed snem.
# 4) Bieżący wątek, który jest uśpiony, może zostać przerwany przez dowolny inny wątek. W tym przypadku zostanie zgłoszony „InterruptedException”.
testowanie strony internetowej pod kątem podatności na iniekcję sql
Thread.sleep Przykład w Javie
Przejdźmy teraz do przykładu, który demonstruje metodę snu. Tutaj mamy klasę wątku, która ma metodę run (). W metodzie run () nazywamy „Thread.sleep (1000)”. Następnie w funkcji głównej tworzymy dwa wystąpienia tego wątku, czyli dwa wątki. Następnie rozpoczynamy wątki.
W danych wyjściowych zauważamy, że ponieważ oba wątki działają, wątki są planowane jeden po drugim, tj. Gdy jeden śpi, drugi działa.
Przykład:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
Wynik:
Kiedy obserwujemy dane wyjściowe, okazuje się, że Thread_0 i Thread_1 wykonują się na zmianę.
Thread.sleep () Z ujemną wartością czasu uśpienia
Następnie zademonstrujemy inny przykład metody Thread.sleep (). Tutaj rozważaliśmy szczególny przypadek ujemnej wartości czasu snu. Program jest podobny do powyższego, ale podany czas uśpienia to -500.
Przykład:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
Wynik:
Na podstawie wyników widać, że metoda zgłosiła „IllegalArgumentException”, ponieważ ujemna wartość czasu uśpienia jest niedopuszczalna.
Często Zadawane Pytania
Pytanie 1) Jak działa usypianie wątków w Javie?
Odpowiedź: Gdy funkcja sleep () jest wywoływana w wątku przez określony czas w milisekundach, wątek przerywa wykonywanie. Zrzuca procesor. Zatem w czasie, gdy wątek śpi, inne wątki mogą korzystać z procesora.
P # 2) Co to jest yield () i sleep () w wątku Java?
Odpowiedź: Metoda sleep () wątku powoduje, że wątek zwalnia procesor i przerywa wykonywanie. Gdy ten wątek śpi, pozostałe wątki pobierają procesor. Robi to planista.
jak otwierać pliki mkv w systemie Windows
Metoda yield () powoduje również, że wątek rezygnuje z kontroli procesora po wywołaniu, ale metoda sleep () wykazuje bardziej określone zachowanie w porównaniu z yield ().
Pytanie 3) Jak zatrzymać zasypianie wątku Java?
Odpowiedź: Zatrzymujemy wątek Java od spania za pomocą metody przerywania (). Każdy wątek oczekujący lub uśpiony można przerwać, wywołując metodę przerwania () klasy Thread.
Q # 4) Czy możemy zabić wątek w Javie?
Odpowiedź: Nie, wątek nie jest zabijany w Javie. Zamiast tego wątek jest zatrzymywany w Javie. Wątek jest zakończony, a następnie można go bezpiecznie zamknąć. Często używamy niestabilnego pola boolowskiego, które jest okresowo sprawdzane pod kątem wszelkich zmian wartości, abyśmy mogli zakończyć wątek.
P # 5) Dlaczego sleep () jest metodą statyczną?
Odpowiedź: Podczas wywoływania metody sleep () w celu uśpienia wątku, zawsze wywołujemy ją za pomocą klasy Thread.
Na przykład , Thread.sleep (1000);
Powyższe wywołanie działa w kontekście bieżącego wątku i uśpia bieżący wątek. Nigdy nie wywołujemy metody przy użyciu określonej instancji wątku. Zatem metoda jest statyczna.
Wniosek
W tym samouczku omówiliśmy metodę sleep () wątków w Javie. Sleep () powoduje, że bieżący wątek, który jest wykonywany, zaprzestaje wykonywania na określony czas, który jest podawany jako argument metody sleep.
Program planujący system działa z metodą uśpienia, aby wprowadzić bieżący wątek w stan oczekiwania. Kiedy nić śpi, nadal posiada nabyte zamki lub monitory. Kiedy przekazujemy ujemną wartość czasu snu do metody snu, zgłasza ona „IllegalArgumentException”.
Kiedy przekażemy poprawną wartość czasu uśpienia do metody sleep (), pozostałe wątki wykonają kolejkę, podczas gdy bieżący wątek śpi.
=> Zajrzyj tutaj, aby zobaczyć A-Z samouczków szkoleniowych Java tutaj.
rekomendowane lektury
- Wielowątkowość w Javie - samouczek z przykładami
- Wielowątkowość w C ++ z przykładami
- Synchronizacja Java: Co to jest synchronizacja wątków w języku Java
- Wątki Java z metodami i cyklem życia
- Samouczek dotyczący ciągów Java | Metody ciągów Java z przykładami
- Jak korzystać z metody toString w języku Java?
- TreeMap w Javie - samouczek z przykładami TreeMap w języku Java
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java