notify()和wait()的注意事项

1)notify() 和 wait() 都是需要通过锁来使用,也就是synchronized()括号里的对象来使用的,

如果不是synchronized()的对象,那么将会报错 IllegalMonitorStateException。

synchronized (locker1){
    try {
        locker2.wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

2)要想让notify()顺利唤醒wait(),则必须确保wait()和notify()是通过同一个对象调用的。

synchronized (locker1){
    locker1.wait();
}
synchronized (locker1){
    locker1.notify();
}

3)如果进行notify()操作时,没有线程处于wait()状态,notify则相当于空打一炮,并没有副作用。

4)wait() 会被interrupt()唤醒,并报错,并且它们的含义不同,被interrupt()唤醒则是被告知该线程的认为即将结束,而被notify()唤醒,则是继续之前的任务。

你可能感兴趣的:(java)