Zalecane, 2019

Wybór Redakcji

Różnica między metodą uśpienia () i wait () w Javie

Metoda snu i oczekiwania brzmi jak wykonanie tego samego zadania, ale są one bardzo różne od siebie. Metoda spania należy do klasy Thread, a metoda wait należy do klasy Object. Najważniejszą różnicą, która odróżnia je obie, jest metoda uśpienia przytrzymująca obiekt na obiekcie, dopóki nie zostanie przerwana lub zakończy się jego wykonanie. Z drugiej strony, metoda wait zwalnia blokadę obiektu, aby umożliwić innym obiektom wykonanie do momentu wznowienia przez metodę powiadamiania. Istnieje więcej różnic między metodą uśpienia i oczekiwania; możesz je odkryć na wykresie porównawczym pokazanym poniżej.

Wykres porównania

Podstawa do porównaniasenczekać
PodstawowyMetoda uśpienia nie zwalnia blokady obiektu, dopóki nie zostanie przerwana.Metoda wait zwalnia blokadę obiektu, aby umożliwić uruchamianie innych obiektów do momentu wywołania metody notify lub notifyAll.
KlasaMetoda spania jest zdefiniowana w klasie Thread.Metoda oczekiwania jest zdefiniowana w klasie Object.
ZsynchronizowanyMetoda uśpienia nie musi być wywoływana w kontekście zsynchronizowanym.Metoda wait musi zostać wywołana w kontekście zsynchronizowanym.
UkończenieWykonanie metody uśpienia jest kończone, gdy wątek ją przerwie lub upłynie czas uśpienia.Oczekiwanie na wykonanie metody jest zakończone, gdy metoda notify () lub notifyAll () ją przerwie.
StatycznyMetoda uśpienia to metoda statyczna.Metoda oczekiwania nie jest statyczna, dlatego potrzebuje obiektu do jej wywołania.
WykonanieMetoda uśpienia jest wykonywana na bieżącym wątku.Metoda oczekiwania jest wykonywana na obiekcie.
WyjątekInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definicja metody uśpienia

Metoda uśpienia jest statyczną metodą klasy Thread . Metoda uśpienia jest wywoływana, gdy wątek nie chce wykonywać żadnego zadania przez określony czas. Metoda uśpienia kończy jej wykonywanie, gdy upłynie czas metody lub zostanie przerwany przez inny wątek podczas wykonywania. Po zakończeniu metody uśpienia wątek ponownie zyskuje status działającego. Istnieją dwie metody snu, jak pokazano poniżej.

 publiczny statyczny natywny brak snu (długa milisekunda); publiczny statyczny brak snu (długie milisekundy i int nanosekundy); 

W powyższej dwóch postaciach można obserwować czas wymieniany zarówno w formie metody snu. Dzieje się tak, ponieważ wątek zawsze śpi przez określony czas wymieniony w parametrze. Metoda snu może zostać przerwana przez dowolny inny wątek podczas jej wykonywania; w związku z tym może rzucić przerwany eXecption. Musisz zadbać, aby wyjątek był obsługiwany przez blok try / catch lub przez słowa kluczowe Throws, w przeciwnym razie doprowadzi to do błędu czasu kompilacji. Metoda uśpienia blokuje bieżący obiekt podczas wykonywania i nie zezwala na wykonywanie żadnego innego obiektu do momentu zakończenia jego wykonywania.

Definicja metody czekania

Wait to metoda zdefiniowana w klasie Object . Metoda wait jest używana, gdy kilka zadań (wątków) walczy o ten sam zasób po kolei. Po wywołaniu metoda wait zwalnia blokadę obiektu, który wywołał metodę wait. I zapewnić szansę na wykonanie kolejnego obiektu do czasu wywołania metody notify, która dodatkowo wznowi blokadę obiektu zwolnionego metodą wait. Metoda wait ma następującą postać.

 czekać(); wait (długa milisekunda); wait (długa milisekunda, int nanosekunda); 

Podobnie jak w powyższych trzech formach metody wait, pierwsza metoda nie ma parametru czasu, oznacza to, że wykonanie metody wait będzie trwało do momentu, aż powiadomienie nie zostanie wywołane lub metoda notifyAll nie zostanie wywołana. Pozostałe dwie metody mają parametry czasowe. Tak więc będą one wykonywane do upływu czasu lub do momentu, gdy powiadomienie lub noitfyAll metoda zostanie wywołana wcześniej niż upłynie czas. Metoda wait może generować wyjątki. IllegalArgumentException, jeśli przekazywany argument czasu jest ujemny. IllegalMonitorStateException, jeśli bieżący wątek nie korzysta z zasobu. InterruptedException, jeśli metoda wait jest przerwana.

Kluczowe różnice między metodą uśpienia i oczekiwania w Javie

  1. Głównym punktem, który odróżnia metodę "uśpienia i oczekiwania", jest to, że metoda uśpienia utrzymuje blokadę obiektu, dopóki nie zostanie przerwana lub upłynie jego czas. Jednak metoda wait zwalnia blokadę obiektu, który ją wywołuje i daje szansę na wykonanie innych obiektów.
  2. Metoda uśpienia jest zdefiniowana w klasie Thread, natomiast metoda wait jest zdefiniowana w klasie Object .
  3. Metoda uśpienia nie musi być wywoływana z kontekstu zsynchronizowanego. Ale metoda oczekiwania musi być wywołana z synchronizacji.
  4. Metoda uśpienia jest budzona, jeśli czas metody wygasł lub został przerwany przez inny wątek. Metoda oczekiwania jest przebudzona
    po wywołaniu powiadomienia lub powiadomienia Wszystkie metody.
  5. Metoda uśpienia jest metodą statyczną, podczas gdy metoda oczekiwania nie jest metodą statyczną .
  6. Metoda uśpienia jest wykonywana na bieżącym wątku, podczas gdy metoda wait jest wykonywana na obiekcie, który ją wywołuje.
  7. Wyjątkiem generowanym przez metodę uśpienia jest wyjątek InterruptedException, natomiast wyjątki metoda thrwon by wait to IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Wniosek:

Gdy wiele wątków chce używać tego samego zasobu jeden po drugim, należy użyć metody wait. Gdy wątek nie chce wykonywać żadnych zadań, należy użyć metody uśpienia.

Top