Cet article vous apporte une introduction (code) sur l'attente et le réveil des threads en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
class ThreadA extends Thread{ public ThreadA(String name) { super(name); } public void run() { synchronized (this) { System.out.println(Thread.currentThread().getName()+" call notify()"); notify(); } } } public class WaitTest { public static void main(String[] args) { ThreadA t1 = new ThreadA("t1"); synchronized(t1) { try { // 启动“线程t1” System.out.println(Thread.currentThread().getName()+" start t1"); t1.start(); // 主线程等待t1通过notify()唤醒。 System.out.println(Thread.currentThread().getName()+" wait()"); t1.wait(); System.out.println(Thread.currentThread().getName()+" continue"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Résultat de sortie : démarrage principal t1 -> attente principale() -> appel t1 notify() ->
En fait, lorsque t1.start() est appelé, t1 est dans l'état prêt, mais dans la méthode principale, t1 est verrouillé par le thread principal. Lorsque t1.wait(), laisser le thread actuel attendre fait en fait. le thread principal attend. Ensuite, le verrou t1 est libéré, le thread t1 s'exécute, imprime l'appel t1 notify(), puis réveille le thread principal et se termine enfin Parlons de la différence entre wait() ; et sleep(). Ce qu'ils ont en commun est de laisser le thread dormir, mais wait() libérera le verrou de synchronisation de l'objet, mais sleep() ne exécutera pas t2 jusqu'à la fin de t1 ;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!