0

次のような静的メソッドがあるとします。

public static string ProcessMessage()
{
     string testString = " this is test ";
     ....
     return testString ;
}

別のメソッド SendMessage:

public void SendMessage()
{
     Thread th = new Thread(this.ProcessMessage);
     th.Start();
     th.Join();
}

SendMessage が次々と数回呼び出されるとどうなりますか。

最初のスレッドが ProcessMessage を呼び出し、1 行目にあり、別のスレッドが ProcessMessage を呼び出したとします。最初のスレッドはどうなりますか? ProcessMessage は静的メソッドであるため、終了することはありますか? ProcessMessage プロパティはどのようになりますか? スレッド 2 はスレッド 1 を上書きしますか?

4

1 に答える 1

3

一般的な質問に答えるために、複数のスレッドが静的メソッドを呼び出すことができ、各スレッドはそのメソッド呼び出しを個別に処理します。静的変数が静的メソッド内で使用されている場合、これらの変数が複数のスレッド間で共有されているため、クロススレッドの問題が発生する可能性がありますが、メソッド コード自体は、スレッドが入力するスレッドが後に続く一連の命令にすぎません。 .

特定の例に関しては、スレッド コンストラクターには、 ParameterizedThreadStartまたはThreadStartオブジェクト (および場合によっては Int32)のみを渡すことができます。どちらのタイプの ThreadStart パラメーターも、void シグネチャを持つデリゲートです (何も返すことはできません)。

また、 Thread.Start を呼び出しているため、その後にThread.Joinが続きます。Thread.Join は、待機中のスレッドが完了するまで、呼び出しスレッドをブロックします。そのため、同じスレッドから SendMessage() を複数回呼び出しても、複数のスレッドが同時に生成されることはありません。代わりに、各呼び出しは新しいスレッドを作成し、それが終了するのを待ってから、SendMesage() の次の呼び出しに進みます。これは、元のスレッドで単純に ProcessMessage を呼び出すことに勝るものはありません。

于 2013-04-08T15:15:29.583 に答える