在新线程上调用静态方法
本文关键字:调用 静态方法 线程 新线程 | 更新日期: 2023-09-27 18:08:09
假设我有一个这样的静态方法:
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吗?
回答您的一般性问题,多个线程可以调用一个静态方法,每个线程将分别处理该方法调用。如果在静态方法中使用静态变量,那么您可能会遇到跨线程问题,因为这些变量在多个线程之间共享,但是方法代码本身只是一组指令,任何进入它的线程都将遵循这些指令。
关于你的具体例子,线程构造函数只能传递一个ParameterizedThreadStart或ThreadStart对象(也可能是Int32)。这两种类型的ThreadStart参数都是带有void签名的委托(它们不能返回任何东西)。
同样,因为你正在调用线程。Start,然后是Thread.Join。线程。Join阻塞调用线程,直到等待线程完成。由于是这种情况,从同一线程对SendMessage()的多次调用将永远不会产生多个同时发生的线程。相反,每次调用都将创建一个新线程,然后等待它完成,然后再进行下一个对sendmessage()的调用。这不比在原始线程中简单地调用ProcessMessage好。