Maison  >  Article  >  Java  >  Explication détaillée du code d'opération pour réveiller notifyAll dans le thread Java

Explication détaillée du code d'opération pour réveiller notifyAll dans le thread Java

黄舟
黄舟original
2017-03-25 10:40:581375parcourir

Cet article présente principalement l'opération de réveil notifyAll dans les threads Java. Il est très bon et a une valeur de référence. Les amis qui en ont besoin peuvent s'y référer

Remarque :

NotifyAll et notify en Java sont deux opérations pour réveiller les threads notify ne réveilleront qu'un certain thread dans le pool d'attente, mais il n'est pas sûr de quel thread il s'agit de notifyAll. objet spécifiéTous les threads à l'intérieur effectuent des opérations de réveil une fois que l'objet spécifié est réveillé avec succès. Il rejoindra immédiatement le concours de ressources du fil.

Par exemple :

package TestThread.ThreadSynchronized;
public class TestWaitAll {
 public static void main(String[] args) {
  Test1 test1 = new Test1();
  Thread t = new Thread(test1, "线程1");
  Thread t1 = new Thread(test1, "线程2");
  Thread t2 = new Thread(test1, "线程3");
  Test2 test2 = new Test2(test1, "唤醒线程");
  t.start();
  t1.start();
  t2.start();
  try {
   Thread.sleep(2000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  test2.start();
 }
}
class Test1 implements Runnable {
 public void run() {
  synchronized (this) {
   try {
    this.wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println(Thread.currentThread().getName() + "当前没有被执行到!");
  }
 }
}
class Test2 extends Thread {
 private Test1 test1;
 String name;
 public Test2(Test1 test1, String name) {
  super(name);
  this.name = name;
  this.test1 = test1;
 }
 public void run() {
  synchronized (test1) {
   test1.notifyAll();// 针对当前对象执行唤醒所有线程的操作
   System.out.println(Thread.currentThread().getName() + ":唤醒线程执行成功!");
  }
 }
}

Le résultat de l'exécution est :

Explication détaillée du code d'opération pour réveiller notifyAll dans le thread Java

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