問題タブ [illegalmonitorstateexcep]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 複数のスレッドが同期ブロックにアクセスできるのはなぜですか?
これを実行している間IllegalMonitorStateException
、オブジェクトがロックされていないときにスレッドが通知しようとしているため、取得していますisEven
。なぜこうなった?スレッドは、オブジェクトがロックされている場合にのみ、同期ブロック内に入ることができます。
java - Java の IllegalMonitorStateException
私はIllegalMonitorStateException
自分のコードに を取得しています。
startEmployeeProcess()
メソッド内でthread1
(EmployeeThread) を開始し、スイッチ内で呼び出しますthread1.wait()
(ケース 3)
私のコードの問題は何ですか?
助けてください
ありがとう
クラス:
従業員スレッド
java - アクティブ待機置換 - 私のアプローチは設計上正しいですか?
私は待っている:
私のコード:
編集:
1)すべての場合-これを使用するときは注意してください。wait()とnotify()の両方を同期ブロックでラップする必要があります。そうしないと、コードにそれがあり、この例外検索を再度取得すると、IlegalMonitorExceptionが発生します。おそらく、この同期ブロックなしで別の通知を別の場所で呼び出します。コメントに感謝します。
2)私のコードは大丈夫だったので質問を修正しましたが、sh **が発生し、どこかで何かを削除するのを忘れていました。これはうまくいっています。質問は私の実装が正しいですか?
私が完全に確信していない点がいくつかあります:
- 私は待機によってアクティブな待機を取り除き、いくつかのオブジェクトに通知します
- プログラムの評価が while ループになると、スレッドはオブジェクトでスリープ状態になり、スレッドは何でも実行し、アクティブな待機はパッシブな待機に置き換えられるため、CPU にとってははるかに優れています。
- Manager で状態の変更が発生し、対応するメソッド managerStateChanged() が呼び出されると、スリープ状態のスレッド MyThread で同じメソッドが呼び出され、待機中の状態であるかどうかを確認します。そうでない場合は、スレッドがまだスリープ状態である場合、実行中のフラグが変更され、スレッドが起動され、while ループ条件がループではなくなり、受動的な待機から抜け出し、スレッドは while ループの後に有用なコードを続行します。
- 考慮すべきもう1つのことと、その偽のウェイクアップがあります。通知する前にスレッドをウェイクアップできるということです。これがここで問題にならないことを願っています。なぜなら、受動的なwhileループ条件を通知する前にスレッドがウェイクアップした場合、まだ満たされていないからです。そのため、再びスリープ状態になり、偽のウェイクアップは問題になりません。
これについての私の推測は正しいですか?コードは明確ですか?もっとよく扱われるべきものを見逃していませんか?ないことを願っています。返信ありがとうございます。
java - 異なるスレッドでの同時実行 (ReentrantLock)
別のスレッドで ReentrantLock を使用する必要があります。可能ですか?PS secondMethod "lock.unlock()" では、IllegalMonitorStateException をスローします。
編集: java.util.concurrent.locks.Condition で解決!
java - notifyAll() メソッドでの java.lang.IllegalMonitorStateException
オラクルのWebサイトのJavaチュートリアルに従って、スレッドについてまだ学んでいます。
wait() と notifyAll() に関して、いくつかのコードを書きました。私の予想される出力は、run() でメッセージを 10 回出力guardedJoy(GuardedBlock guardedBlock)
し、run メソッドで「喜び」が false に設定されている場合、メソッドで「StopFun スレッドによって停止された楽しい」メッセージを出力することです。
これは私のコードです。
run メソッドのコードは正常に実行されますが、その後、このような例外がスローされます。
thisやthisのようなサイトでいくつかの質問と回答を調べましたが、正確に何が間違っているのかわかりませんでした。ヘルプは非常に高く評価されています。
ありがとう。
java - notifyAll の呼び出し中に IllegalMonitorStateException が発生しました
notifyAll の呼び出し中に IllegalMonitorException が発生するコードがあります。enQueue() 中、スレッドはデータを追加し、 illegalMonitorException をスローします。
BlockingQueue.class :
Main.Class :
Producer.class :
Consumer.class :
出力:
追加 94
スレッド「プロデューサー」での例外 java.lang.IllegalMonitorStateException