wait()
、notify()
和 notifyAll()
的调用。
在一个对象上调用这些方法但该对象上没有持有锁,会导致 IllegalMonitorStateException
。
这样的结构不一定是错误的,因为在调用该包含方法前可能已获取必要的锁,但即便如此,还是要仔细了解。
示例:
class Sync {
private final Object lock = new Object();
void test() throws InterruptedException {
synchronized (this) {
lock.wait(); // 'lock.wait()' 未在 'lock' 上同步
}
}
}