假设我有
class classA {
void someMethod()
{
Thread a = new Thread(threadMethod);
Thread b = new Thread(threadMethod);
a.Start();
b.Start();
a.Join();
b.Join();
}
void threadMethod()
{
int a = 0;
a++;
Console.Writeline(a);
}
}
class classB {
void someMethod()
{
Thread a = new Thread(threadMethod);
Thread b = new Thread(threadMethod);
a.Start();
b.Start();
a.Join();
b.Join();
}
static void threadMethod()
{
int a = 0;
a++;
Console.Writeline(a);
}
}
假设在classA和classB中,threadMethod的内容对其内部范围之外的任何内容都没有影响,是否使得classB中的threadMethod具有任何功能差异?
另外,我启动两个在同一个类中使用相同方法的线程。每个方法都有自己的堆栈,它们在classA和classB中是否彼此隔离? 在这种情况下静态真的没有改变吗?
答案 0 :(得分:3)
方法没有堆栈,线程没有。在您的示例中,threadMethod
仅使用局部变量,这些变量对于执行该方法的线程始终是私有的。如果方法为static
,则方法不共享任何数据,这没有任何区别。
答案 1 :(得分:2)
在这种情况下,没有功能差异。每个线程都有自己的堆栈
答案 2 :(得分:2)
也许你可以更清楚一些。在大多数语言中,函数是否声明为静态无关紧要。每个线程都有自己的私有statck。
答案 3 :(得分:1)
每个线程都会获得自己的堆栈。在两者之间没有任何功能差异。
唯一的区别(显然)是静态版本无法访问成员函数/变量。