【问题标题】:Threading from within a class with static and non-static methods使用静态和非静态方法从类中线程化
【发布时间】:2009-10-02 21:10:39
【问题描述】:

假设我有

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

【问题讨论】:

    标签: multithreading oop thread-safety


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          每个线程都会得到它自己的堆栈。两者之间没有功能上的区别。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-11
            • 1970-01-01
            • 2023-03-15
            • 1970-01-01
            相关资源
            最近更新 更多