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 回答