私はgettyを起動する統合テストを持っていて、それが順番にWebアプリケーションを起動します。 Webアプリケーションは、初期化タスクを実行するいくつかの非同期スレッドにまたがります。その後、テストする準備が整いました。以下のアクセサメソッドを持つ誰かがなぜ私はこのIllegalMonitorStateExceptionを取得している知っていますか?
private static Object bootstrapDone = new Object();
:今、私は共有クラスに静的モニターを置く考えを完了するためにそれらのいずれかのタスクを待つようにしましたので
public static void signalEsBoostrapCompleted(){
synchronized (bootstrapDone){
bootstrapDone.notifyAll();
}
}
public static void waitEsBoostrapCompleted() throws InterruptedException {
synchronized (bootstrapDone){
bootstrapDone.wait(20000);
}
}
私はでこれを実行する場合私が手にテスト:のnotifyAllがある行からのスレッドで 例外java.lang.Object.notifyAllで「スレッド-11」java.lang.IllegalMonitorStateException (ネイティブメソッド)
。なぜこれが起こっているのか分かりません。 誰も助けることができますか?
あなたはいつでも 'bootstrapDone'の値を変更していますか? (私は変数を最終的にすることを提案したい...) –
何かによって再割り当てされたブートストラップは終了しましたか?そうでない場合でも、それを「最終的」にするべきです。ロックするために特別に作成するオブジェクトは、通常は定数(つまり「最終」)である必要があります。 – Dev
実際にはそうですが、テストをすばやく書き込もうとしていました。 – gotch4