To bardzo proste pytanie, ponieważ obie te metody mają zupełnie inne zastosowanie.
Główną różnicą jest oczekiwanie na zwolnienie blokady lub monitora, podczas gdy sen nie zwalnia żadnej blokady ani monitora podczas oczekiwania. Czekanie służy do komunikacji między wątkami, podczas gdy sen służy do wprowadzenia pauzy przy wykonywaniu.
To było tylko jasne i podstawowe wyjaśnienie, jeśli chcesz czegoś więcej, czytaj dalej.
W przypadku wait()
metody wątek przechodzi w stan oczekiwania i nie wróci automatycznie, dopóki nie wywołamy notify()
metody (lub notifyAll()
jeśli masz więcej niż jeden wątek w stanie oczekiwania i chcesz obudzić wszystkie te wątki). I trzeba zsynchronizować lub blokady obiektu lub blokada klasa Aby uzyskać dostęp do wait()
albo notify()
lub notifyAll()
metod. I jeszcze jedno:wait()
metoda jest używana do komunikacji między wątkami, ponieważ jeśli wątek przejdzie w stan oczekiwania, potrzebny będzie inny wątek, aby go obudzić.
Ale w takim przypadku sleep()
jest to metoda używana do wstrzymania procesu przez kilka sekund lub żądany czas. Ponieważ nie musisz prowokować żadnej metody notify()
ani notifyAll()
metody odzyskania tego wątku. Lub nie potrzebujesz żadnego innego wątku, aby go oddzwonić. Na przykład, jeśli chcesz, aby coś się wydarzyło po kilku sekundach, np. W grze po kolejce użytkownika, chcesz, aby użytkownik czekał na uruchomienie komputera, możesz wspomniećsleep()
metodzie.
I jeszcze jedna ważna różnica, o którą często pytamy w wywiadach: sleep()
należy do Thread
klasy i wait()
należy doObject
klasy.
To są wszystkie różnice między sleep()
iwait()
.
I istnieje podobieństwo między obiema metodami: obie są sprawdzane, więc musisz spróbować złapać lub rzucić, aby uzyskać dostęp do tych metod.
Mam nadzieję, że to Ci pomoże.