短いバージョン: Java で、スレッドが待機状態になっている時間を調べる方法はありますか? 関連する場合、参照しているオブジェクトは への呼び出しによって待機状態に送られcondition.await()
ます。
長いバージョン: (これは宿題です)
私は、同期された共通の「会議室」を使用して、10 個のサプライヤー スレッドと 10 個のコンシューマー スレッドを作成するプログラムに取り組んでいます。サプライヤー スレッドは少しの間スリープし、乱数を生成し、(会議室のデータ フィールドが空の場合) そのフィールドに乱数を入力し、同じ ID を持つコンシューマー スレッド用にマークします。データ フィールドが空でない場合、それらawait
は占有状態にあります。コンシューマー スレッドは、会議室のデータがマークされているかどうかを確認します。マークされていない場合は、await
間違った ID 状態にあります。その場合は、数値をデータ フィールドに保存し、null に設定しOccupied.signalAll()
て、データ フィールドが空になったことをサプライヤ スレッドに通知するために呼び出します。(サプライヤ スレッドwrongID.signalAll()
は、新しいデータがフィールドにあることをコンシューマ スレッドに通知するために呼び出します)。
いくつかの診断println
ステートメント (サプライヤー 0 が会議室に入り、データを残す / サプライヤー 1 が待合室に入る...) があり、すべてが正常に機能しているようです。また、スレッドがウェイクアップしたときに、スレッドが待機状態にあった時間を表示するステートメントを出力したいと思います。これは可能ですか?
また、誰かがここで私のロジックに欠陥を見つけた場合は、遠慮なく指摘してください (これはマルチスレッドへの私の最初の進出の 1 つです)。