Java Thread notifyAll()方法

Thread类的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 Runtime类 下一篇:无