0
我有一個對象的散列表。訪問hashmap是同步的。每個對象都有一個關於它是否可以改變的條件。如果對象不適用於條件,則object.wait();被調用並且當前線程等待。如果可用,該對象被修改,然後放回HashMap的:從哈希映射中更改對象是否會影響多個線程中的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正在改變這個對象的屬性,及線程正在等待訪問對象。 Thread1完成更改,將其放回散列映射中,並調用object.notify()。 線程2中的對象是否仍然收到通知?
你的代碼不會按照寫入的方式工作,因爲如果你當前在該對象上是'synchronize',那麼你只能在'notify'上調用'wait'。如果你不是,你會得到一個'IllegalMonitorStateException' –