私はオブジェクトのハッシュマップを持っています。ハッシュマップへのアクセスは同期されます。各オブジェクトには、変更可能かどうかの条件があります。オブジェクトがcondition経由で利用できない場合、object.wait();現在のスレッドが待機します。それが利用可能である場合は、オブジェクトが変更され、その後、ハッシュマップに戻されます。ハッシュマップからオブジェクトを変更すると、複数のスレッドのwait()メソッドに影響しますか?
HashMap<String, Boolean> availabilityMap = new HashMap<String, Boolean>();
HashMap<String, Object> objectMap = new HashMap<String, Object>();
...
...
lock() {
while (!availabilityMap.get(objectName)) {
object = objectMap.get(objectName);
object.wait();
}
availabilityMap.put(objectName, false);
object = objectMap.get(objectName);
}
object.attribute = newValue;
lock() {
objectMap.put(objectName, object);
availabilityMap.put(objectName, true);
object = objectMap.get(objectName);
object.notify();
}
セイスレッド1は、このオブジェクトの属性を変更して、スレッド2は、オブジェクトにアクセスするために待っています。 Thread1はそれを変更し終え、ハッシュマップに戻し、object.notify()を呼び出します。 thread2のそのオブジェクトはまだ通知を受け取りますか?
あなたのコードは、現在そのオブジェクトに対して 'synchronized'されている場合に' notify'で 'wait'を呼び出すことしかできないので、あなたのコードは書かれた通りに動作しません。もしそうでなければ、あなたは 'IllegalMonitorStateException'を取得します。 –