在新线程上调用静态方法

时间:2013-04-08 15:10:21

标签: c# asp.net multithreading

假设我有一个像这样的静态方法:

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?

1 个答案:

答案 0 :(得分:3)

要回答一般问题,多个线程可以调用静态方法,每个线程将分别处理该方法调用。如果在静态方法中使用静态变量,那么由于这些变量在多个线程之间共享,您可能会遇到跨线程问题,但是方法代码本身只是一组指令,无论线程输入什么线程都会遵循这些指令

关于您的具体示例,Thread Constructor只能传递ParameterizedThreadStartThreadStart对象(可能还有Int32)。两种类型的ThreadStart参数都是具有void签名的委托(它们不能返回任何内容)。

此外,因为您正在调用Thread.Start,然后是Thread.Join。 Thread.Join阻塞调用线程,直到等待线程完成。因为这种情况,从同一个线程多次调用SendMessage()永远不会产生多个同时线程。相反,每个调用都将创建一个新线程,然后等待它完成,然后再继续调用SendMesage()。这并不比简单地在原始线程中调用ProcessMessage更好。