Java Thread notify()方法

java.lang.Thread.notify() 方法用于唤醒单个线程。此方法仅针对正在等待特定对象的一个线程给出通知。如果我们使用notify() 方法,并且多个线程正在等待通知,则只有一个线程获得通知,其余线程必须等待进一步的通知。

1 语法

public final void notify()

2 参数

3 返回值

4 示例 

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * java.lang.Thread.notify()方法的例子
 */
import java.lang.*;

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 Demo
{
    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

热门文章

优秀文章