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 Objet

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-Java

Laisser un commentaire

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