Différence entre Sleep et Wait

Quelle est la différence entre sleep() et wait() ? – sleep() est une méthode qui permet de maintenir le processus pendant quelques secondes ou à un certain temps défini, la méthode wait() met un processus en attente, elle ne reviendra pas automatiquement active tant que nous n’appellerons pas notify() ou notifyAll().
 
 
La principale différence est que wait () libère le verrou ou le moniteur alors que sleep () ne libère aucun verrou ou moniteur en attendant juste le temps accordé. Wait est utilisé pour la communication inter-thread alors que sleep est utilisé pour introduire une pause lors de l’exécution.
Questions piège en Programmation Orientée ObjetQuestions piège sur la Programmation Orientée Objet – JAVA – Partie 1Les questions pouvant être posées par des recruteurs sont nombreuses. Ce sont quelques-unes des questions les plus fréquemment posées. Prenez le temps de lire ces…Lire plus

Définition de Sleep

Thread.sleep() envoie le thread en cours à l’état «Not Runnable» pendant un certain temps. Le thread garde les moniteurs qu’il a acquis – par exemple, si le thread est actuellement dans un bloc ou une méthode synchronisée, aucun autre thread ne peut entrer dans ce bloc.

Si un autre thread appelle t.interrupt(), il va réveiller le thread en sommeil. Notez que sleep est une méthode statique, ce qui signifie qu’elle affecte toujours le thread en cours (celui qui exécute la méthode sleep()). Une erreur commune est d’appeler t.sleep () t est un thread différent; alors, c’est le thread en cours qui va dormir, pas le thread t.

Exemple:

synchronized(mon_verrou) {   
    Thread.sleep(1000); // mon_verrou est tenu
}

 

Définition de Wait

object.wait() envoie le thread en cours à l’état «Not Runnable», comme sleep (), mais avec une différence subtile. Wait est appelé sur un objet, pas un thread; nous appelons cet objet «un verrou». Avant d’appeler lock.wait (), le thread en cours doit se synchroniser sur l’objet (le verrou); wait () libère alors ce verrou et ajoute le thread à la «liste d’attente» associée au verrou. Plus tard, un autre thread peut se synchroniser sur le même objet (le verrou) et appeler lock.notify(). Cela réveille l’original fil d’attente. Généralement, wait() / notify() est comme sleep() / interrupt(), seul le thread actif n’a pas besoin d’un pointeur direct sur le thread en sommeil, mais uniquement sur l’objet de verrou partagé.

Exemple:

synchronized(mon_verrou) {   
    mon_verrou.wait(); // mon_verrou n'est pas tenu
}
QCM-JavaTestez vos connaissances – QCM Java corrigé – Partie 1QCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus

 

Table de comparaison
SleepWait
Appelwait() est appelé sur un objet; le thread en cours doit se synchroniser sur l’objet verrou.sleep() est appelé sur un thread; toujours en cours d’exécution du thread.
Synchronisationwait() lorsque plusieurs threads synchronisés accèdent au même objet un par un.sleep() lorsque plusieurs threads synchronisés attendent la fin du thread en veille.
La classeLa méthode Sleep est définie dans la classe Thread.La méthode wait est définie dans la classe Object.
StatiqueLa méthode sleep() est une méthode statique.La méthode wait() n’est pas statique, c’est pourquoi elle nécessite un objet pour l’invoquer.
SynchroniséLa méthode sleep() n’a pas besoin d’être appelée dans un contexte synchronisé.La méthode wait() doit être appelée dans un contexte synchronisé.
ExécutionLa méthode sleep() est exécutée sur le thread en cours.La méthode wait() est exécutée sur l’objet.
TerminaisonL’exécution de la méthode sleep() est terminée lorsqu’un thread l’interrompt ou le temps est expiré.L’exécution de la méthode wait() est terminée lorsque la méthode notify() ou notifyAll() l’interrompt.
Exception déclenchéesInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.
QCM-JavaQCM java J2EE corrigéQCM sur java J2EE avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et…Lire plus
Conclusion

Lorsque plusieurs threads souhaitent utiliser la même ressource un par un, la méthode wait() doit être utilisée. Lorsqu’un thread ne veut effectuer aucune tâche, la méthode sleep() doit être utilisée.
 
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *