Java Thread notify()方法

Thread类的notify()方法用于唤醒单个线程。 此方法仅为一个等待特定对象的线程提供通知。

如果使用notify()方法并且有多个线程正在等待通知,那么只有一个线程获得通知,而剩下的线程必须等待进一步的通知。

语法

public final void notify()

返回
此方法不返回任何值。

异常

  • 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 notify() method  
            this.notify1.notify();  
            System.out.println(Thread.currentThread().getName() + "...notified");  
        }  
    }  
}  
public class JavaNotifyExp   
{  
    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-1...notified

上一篇: Java Runtime类 下一篇:无