需要注意的是:wait() 、 notify()、notifyAll() 这三个方法的调用者 都应该是同步锁对象,如果这三个方法的调用者不是同步锁对象,JVM 会报 IllegalMonitorStateException 的异常。
public synchronized void method(){
//然后就可以调用:this.notify()...
//或者直接调用notify()...
}public Class Test{
public static synchronized void method(){
//然后调用:Test.class.notify()...
}
}public Class Test{
public Object lock = new Object();
public static void method(){
synchronized (lock) {
//需要调用 lock.notify();
}
}
}A、在同步快外使用wait(timeout)其效果和sleep(timeout)是一样的
B、notifyAll唤醒了所有因wait等待的线程,这些线程将并发
C、notifyALL消耗的CPU资源比notify多
D、进入wait状态的线程,只可能被notify或notifyAll唤醒 public final void wait() throws InterruptedException {
this.wait(0L);
}public final native void wait(long var1) throws InterruptedException;public final void wait(long var1, int var3) throws InterruptedException {
if (var1 < 0L) {
throw new IllegalArgumentException("timeout value is negative");
} else if (var3 >= 0 && var3 <= 999999) {
if (var3 > 0) {
++var1;
}
this.wait(var1);
} else {
throw new IllegalArgumentException("nanosecond timeout value out of range");
}
}