Java notify()方法
线程类的
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-1Starting of Thread-2Starting of Thread-3Thread-3...notifiedThread-1...notified