Maison >Java >javaDidacticiel >Les différences et utilisations entre sleep(), wait(), rendement()

Les différences et utilisations entre sleep(), wait(), rendement()

零下一度
零下一度original
2017-06-30 09:56:483049parcourir

sleep, le fil dort, permettant au fil droit de faire une pause pendant un certain temps et d'entrer dans l'état d'attente de synchronisation.

Méthode : static void sleep(long millis) Après avoir appelé sleep, le thread actuel abandonne le CPU Dans le délai spécifié, le thread où se trouve sleep n'aura pas la possibilité de s'exécuter. Les threads dans cet état ne libéreront pas les verrous de synchronisation/écouteurs de synchronisation.

  Cette méthode est davantage utilisée pour simuler le retard du réseau, ce qui rend plus évident l'effet d'erreur de plusieurs threads accédant simultanément à la même ressource.

Attendez, méthode de communication par thread, la classe java.lang.Object fournit deux types de méthodes pour faire fonctionner la communication par thread.

Wait() : L'objet thread exécutant cette méthode libère le verrou de synchronisation. La JVM stocke le thread dans le pool d'attente et attend que d'autres threads réveillent le thread.

Notify() : le thread exécutant cette méthode réveille tout thread en attente dans le pool d'attente et transfère le thread vers le pool de verrouillage pour attendre.

notifyAll() : le thread exécutant cette méthode réveille tous les threads en attente dans le pool d'attente et transfère les threads vers le pool de verrouillage pour attendre.

 (Remarque : la méthode ci-dessus ne peut être appelée que par l'objet de verrouillage de surveillance synchrone, sinon une erreur IllegalMonitorStateException.)

rendement, fil par courtoisie, cela signifie que l'objet thread actuel indique au planificateur qu'il est prêt à abandonner le processeur, mais le planificateur est libre d'ignorer l'invite.

Après avoir appelé cette méthode, l'objet thread entre dans l'état prêt, il est donc tout à fait possible qu'après qu'un thread ait appelé rendement(), le planificateur de thread le planifie pour sa réexécution.

 Il ressort clairement de la documentation fournie par Java7 que cette méthode est rarement utilisée en développement. Cette méthode est principalement utilisée pour le débogage ou les tests. Elle peut être utile en raison de conditions de concurrence multithread. L'erreur ci-dessous apparaît à nouveau .

De plus : La différence entre la méthode sleep et la méthode de rendement :

 1. Les deux peuvent amener le thread en cours d'exécution à abandonner le processeur et à donner à d'autres threads la possibilité de courir.

 2. La méthode sleep donnera aux autres threads une chance de s'exécuter, mais ne prend pas en compte les priorités des autres threads. La méthode rendement ne donnera qu'aux threads de même priorité ou de priorité supérieure une chance de s'exécuter.

3. Après avoir appelé la méthode sleep, le thread entre dans l'état d'attente de synchronisation. Après avoir appelé la méthode rendement, le thread entre dans l'état prêt.

Diagramme du cycle de vie des threads :

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn