线程类的 notifyAll() 方法用于唤醒所有线程。此方法向特定对象的所有等待线程提供通知。
如果我们使用 notifyAll() 方法并且有多个线程在等待通知,那么所有线程都收到了通知,但是线程的执行将一个一个地执行,因为线程需要一个锁,而一个对象只有一个锁可用。
用法
public final void notifyAll()
返回
此方法不返回任何值。
异常
IllegalMonitorStateException:如果当前线程不是对象监视器的所有者,则抛出此异常。
示例
class Notify1 extends Thread
{
public void run()
{
synchronized(this)
{
System.out.println("Starting of " + Thread.currentThread().getName());
try {
this.wait();
}
catch (InterruptedException e) {
e.printStackTrace();}
System.out.println(Thread.currentThread().getName() + "...notified");
}
}
}
class Notify2 extends Thread {
Notify1 notify1;
Notify2(Notify1 notify1)
{
this.notify1 = notify1;
}
public void run()
{
synchronized(this.notify1)
{
System.out.println("Starting of " + Thread.currentThread().getName());
try {
this.notify1.wait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "...notified");
}
}
}
class Notify3 extends Thread
{
Notify1 notify1;
Notify3(Notify1 notify1)
{
this.notify1 = notify1;
}
public void run()
{
synchronized(this.notify1)
{
System.out.println("Starting of " + Thread.currentThread().getName());
// call the notifyAll() method
this.notify1.notifyAll();
System.out.println(Thread.currentThread().getName() + "...notified");
}
}
}
public class JavaNotifyAllExp
{
public static void main(String[] args) throws InterruptedException
{
Notify1 notify1 = new Notify1();
Notify2 notify2 = new Notify2(notify1);
Notify3 notify3 = new Notify3(notify1);
// creating the threads
Thread t1 = new Thread(notify1, "Thread-1");
Thread t2 = new Thread(notify2, "Thread-2");
Thread t3 = new Thread(notify3, "Thread-3");
// call run() method
t1.start();
t2.start();
Thread.sleep(100);
t3.start();
}
}
输出:
Starting of Thread-1 Starting of Thread-2 Starting of Thread-3 Thread-3...notified Thread-2...notified Thread-1...notified
相关用法
- Java Thread notify()用法及代码示例
- Java Thread toString()用法及代码示例
- Java Thread interrupted()用法及代码示例
- Java Thread setDefaultUncaughtExceptionHandler()用法及代码示例
- Java Thread suspend()用法及代码示例
- Java Thread destroy()用法及代码示例
- Java Thread holdLock()用法及代码示例
- Java Thread getContextClassLoader()用法及代码示例
- Java Thread setContextClassLoader()用法及代码示例
- Java Thread sleep()用法及代码示例
- Java Thread getThreadGroup()用法及代码示例
- Java Thread isInterrupted()用法及代码示例
- Java Thread enumerate()用法及代码示例
- Java Thread resume()用法及代码示例
- Java Thread activeCount()用法及代码示例
- Java Thread isDaemon()用法及代码示例
- Java Thread setDaemon()用法及代码示例
- Java Thread getId()用法及代码示例
- Java Thread setName()用法及代码示例
- Java Thread getDefaultUncaughtExceptionHandler()用法及代码示例
注:本文由纯净天空筛选整理自 Java Thread notifyAll() method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。