synchronisiert Ich möchte eigene einfache Semaphore schreiben und es geschieht wie folgt:java auf Objekt synchronisiert vs auf dieser
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();
}
}
}
es funktioniert gut. Aber wenn ich synchronisierte (lock) mit synchronize (this) ersetze, fängt es an, IllegalMonitorStateException zu werfen. Warum?
lock.wait() sollte() auch auf this.wait geändert werden. Also lock.notify(). –
@Alexei yep, aber meine Frage ist, "warum diese Ausnahme geworfen wird", nicht "wie es funktioniert" – borune