スレッドに関する質問があり、スレッドに関する控えめなバックグラウンドと見なされるものがあります。
次の (単純化しすぎた) 設計と動作があるとします。
オブジェクト ObjectA - オブジェクト ObjectB およびメソッド MethodA() への参照があります。Object ObjectB - ObjectA、要素の配列 ArrayB、およびメソッド MethodB() への参照があります。
ObjectA は、ObjectB のインスタンス化を担当します。ObjectB.ObjectA は、ObjectB のインスタンス化子を指します。
これで、いくつかの条件が満たされるたびに、新しい要素が ObjectB.ArrayB に追加され、この要素 (ThreadB_x など) に対して新しいスレッドが開始されます。x は 1 から ObjectB.ArrayB.Length になります。このような各スレッドは、ObjectB.MethodB() を呼び出してデータを渡します。次に、データ処理のために ObjectB.ObjectA.MethodA() を呼び出します。
そのため、複数のスレッドが同じメソッド ObjectB.MethodB() を呼び出します。これらのスレッドが同時に呼び出す可能性は非常に高くなります。MethodB には、新しいオブジェクトを作成して初期化するコードがたくさんあるので、問題はないと思います。しかし、このメソッドは ObjectB.ObjectA.MethodA() を呼び出しますが、そこで何が起こっているのかまったくわかりません。私が得た結果に基づくと、明らかに何も問題はありませんが、それを確認したいと思います。
今のところ、ObjectB.ObjectA.MethodA() の呼び出しを ObjectB.MethodB() 内の lock ステートメントで囲みました。それは 100% 確実ではありません。しかし、各 ThreadB_x が ObjectB.MethodB() を何度も非常に高速に呼び出すとどうなるでしょうか? ObjectB.ObjectA.MethodA() が終了するのを待っている呼び出しのキューはありますか?
ありがとう。