【发布时间】:2017-07-05 12:26:11
【问题描述】:
我想编写自己的简单信号量并按如下方式完成:
class Semaphore {
private boolean done;
private final Object lock = new Object();
public Semaphore(boolean done){ this.done = done;}
public void acquire() throws InterruptedException {
synchronized (lock) {
while (!done)
lock.wait();
done = false;
}
}
public void release() {
synchronized (lock) {
done = true;
lock.notify();
}
}
}
它工作正常。但是,如果我用同步(this)替换同步(锁定),它开始抛出 IllegalMonitorStateException。为什么会这样?
【问题讨论】:
-
lock.wait() 也应该更改为 this.wait()。所以 lock.notify().
-
@Alexei 是的,但我的问题是“为什么抛出这个异常”,而不是“如何做到这一点”
标签: java multithreading synchronize