アプリケーションの最初の起動時に、または単純にクリアMapできるオブジェクトがあります。nullマップが初期化されるまで、このマップにアクセスするすべてのスレッドをブロックする必要があります。その後、すべてのスレッドにこのマップにアクセスするように通知する必要があります。
このマップは構成データを保持し、単一のスレッドが新しい構成データをロードするためにリフレッシュすることを決定しない限り、読み取り専用になります (したがってSynchronized、私も必要とは思わないため、パフォーマンスのために必要ありません)。Conditiona にオブジェクトを使用しようとしましたReentrantLockが、 orIllegalMonitorStateを試みるたびに例外がスローされました。signalAll()await()
ここに私がする必要があることの疑似コードがあります:
void monitorThread{
while(someCondition){
map = updatedMap();
condition.signalAll();
}
}
String readValueFromMap(String key){
if(map == null){
condition.await();
}
return map.get(key);
}