ホームページ >Java >&#&チュートリアル >「Thread.wait()」が「IllegalMonitorStateException」をスローするのはなぜですか?それを修正するにはどうすればよいですか?

「Thread.wait()」が「IllegalMonitorStateException」をスローするのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 05:43:19777ブラウズ

Why Does `Thread.wait()` Throw `IllegalMonitorStateException`, and How Can I Fix It?

wait() と IllegalMonitorStateException によるスレッド同期

Java でマルチスレッドを実装すると、java.lang.IllegalMonitorStateException 例外が発生する可能性があります。 Thread.wait() を使用する場合。この問題は、スレッドが待機するオブジェクトのロックを最初に取得せずに wait() を呼び出そうとした場合に発生します。

この状況を修正し、適切なスレッド同期を確保するには、wait() 呼び出しを囲む必要があります。待機するオブジェクトのコードの同期ブロック内:

synchronized (object) {
    object.wait();
}

このブロックでは、現在のスレッドが指定されたオブジェクトのロックを取得します。 (オブジェクト) を使用して、IllegalMonitorStateException をスローせずに通知されるまで待機できるようにします。

別の解決策は、スレッド管理に対するより安全でユーザーフレンドリーなアプローチを提供する Java の同時実行パッケージを利用することです。同期とパフォーマンスを向上させるには、ConcurrentHashMap クラスまたは Lock インターフェイスの利用を検討してください。

以上が「Thread.wait()」が「IllegalMonitorStateException」をスローするのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。