Il y a beaucoup de réponses ici, mais je ne pouvais pas trouver la distinction sémantique mentionné sur tout.
Il n'est pas sur le fil lui-même; les deux méthodes sont tenus de soutenir les différents cas d'utilisation.
sleep()
envoie le Fil de dormir comme il était avant, c'est juste packs le contexte et s'arrête l'exécution pour une durée prédéfinie. C'est dans le but de le réveiller avant le temps, vous avez besoin de savoir le Fil de référence. Ce n'est pas une situation courante dans un environnement multi-thread. Il est principalement utilisé pour la synchronisation temporelle (par exemple, réveil exactement de 3,5 secondes) et/ou codée en dur de l'équité (juste dormir et de laisser les autres threads de travail).
wait()
, au contraire, est un thread (ou message) mécanisme de synchronisation qui vous permet de notifier un Fil dont vous n'avez pas de référence stockée (ni de soins). Vous pouvez penser que c'est un publish-subscribe motif (wait
== abonnez-vous et notify()
== publier). Fondamentalement, l'aide notify() vous envoyez un message (qui pourrait même ne pas être reçu à tous et normalement vous n'avez pas de soins).
Pour résumer, vous utilisez habituellement sleep()
de temps de synchronisation et d' wait()
pour le multi-thread-synchronisation.
Ils pourraient être mises en œuvre de la même manière dans l'OS sous-jacent, ou pas du tout (comme les versions précédentes de Java n'avait pas vraiment de multithreading; probablement quelques petites VMs ne pas le faire). N'oubliez pas de Java s'exécute sur une machine virtuelle, de sorte que votre code sera transformé en quelque chose de différent en fonction de la VM/OS/HW, il fonctionne sur.