Java线程中的notifyAll唤醒操作(推荐)

作者:简简单单 2017-07-26

java中的notifyAll和notify都是唤醒线程的操作,notify只会唤醒等待池中的某一个线程,但是不确定是哪一个线程,notifyAll是针对指定对象里面的所有线程执行唤醒操作,指定对象一旦唤醒成功。则会立即加入线程的资源争夺中去。

例如:

 代码如下 复制代码

packageTestThread.ThreadSynchronized;

publicclassTestWaitAll {

 publicstaticvoidmain(String[] args) {

  Test1 test1 =newTest1();

  Thread t =newThread(test1,"线程1");

  Thread t1 =newThread(test1,"线程2");

  Thread t2 =newThread(test1,"线程3");

  Test2 test2 =newTest2(test1,"唤醒线程");

  t.start();

  t1.start();

  t2.start();

  try{

   Thread.sleep(2000);

  }catch(InterruptedException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

  test2.start();

 }

}

classTest1implementsRunnable {

 publicvoidrun() {

  synchronized(this) {

   try{

    this.wait();

   }catch(InterruptedException e) {

    e.printStackTrace();

   }

   System.out.println(Thread.currentThread().getName() +"当前没有被执行到!");

  }

 }

}

classTest2extendsThread {

 privateTest1 test1;

 String name;

 publicTest2(Test1 test1, String name) {

  super(name);

  this.name = name;

  this.test1 = test1;

 }

 publicvoidrun() {

  synchronized(test1) {

   test1.notifyAll();// 针对当前对象执行唤醒所有线程的操作

   System.out.println(Thread.currentThread().getName() +":唤醒线程执行成功!");

  }

 }

}

 执行结果为:


相关文章

精彩推荐