# wait & notify
- Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态
- BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片
- BLOCKED 线程会在 Owner 线程释放锁时唤醒
- WAITING 线程会在 Owner 线程调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入EntryList 重新竞争
# API
- obj.wait():让进入object监视器的线程到waitSet等待
- obj.notify():在object上正在waitSet等待的线程中挑一个唤醒
- obj.notifyA1l():让object.上正在waitSet等待的线程全部唤醒
它们都是线程之间进行协作的手段,都属于Object对象的方法。必须获得此对象的锁,才能调用这几个方法,如果没有获取到锁直接调用会报错
@Slf4j
public class Demo {
private static Demo lock = new Demo();
public static void main(String[] args) throws InterruptedException {
// lock.wait(); java.lang.IllegalMonitorStateException
synchronized (lock) {
lock.wait();
//do some thing
}
}
}