2009-10-02 110 views
1

比方說,我有靜態和非靜態方法的類內穿線

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 static中的threadMethod有什麼功能區別?

此外,我啓動了兩個線程,在同一個類中使用相同的方法。每種方法是否都有自己的堆棧,並且它們在classA和classB中彼此隔離? 在這種情況下靜態真的沒有變化嗎?

回答

2

在這種情況下,沒有功能差異。每個線程得到它自己的堆棧

1

每個線程都會得到它自己的堆棧。我可以分辨出兩者之間沒有功能差異。

唯一的區別(顯然)是靜態版本將無法訪問成員函數/變量。

2

也許你可以更清楚一點。如果函數在大多數語言中聲明爲靜態或不是很重要。每個線程都有自己的私人靜態內容。

3

方法沒有堆棧,線程做。在你的例子中,threadMethod只使用局部變量,這些變量對執行該方法的線程來說始終是私有的。如果方法不是static,則不會產生任何影響,因爲該方法不共享任何數據。