使用静态和非静态方法从类中进行线程化

时间:2009-10-02 21:10:39

标签: multithreading oop thread-safety

假设我有

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中是否彼此隔离? 在这种情况下静态真的没有改变吗?

4 个答案:

答案 0 :(得分:3)

方法没有堆栈,线程没有。在您的示例中,threadMethod仅使用局部变量,这些变量对于执行该方法的线程始终是私有的。如果方法为static,则方法不共享任何数据,这没有任何区别。

答案 1 :(得分:2)

在这种情况下,没有功能差异。每个线程都有自己的堆栈

答案 2 :(得分:2)

也许你可以更清楚一些。在大多数语言中,函数是否声明为静态无关紧要。每个线程都有自己的私有statck。

答案 3 :(得分:1)

每个线程都会获得自己的堆栈。在两者之间没有任何功能差异。

唯一的区别(显然)是静态版本无法访问成员函数/变量。