2009-10-02 10 views
1

Disons que jeThreading à partir d'une classe avec des méthodes statiques et non statiques

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); 
    } 
} 

En supposant que CLASSA et ClassB, le contenu de threadMethod n'a aucun effet à rien en dehors de son champ d'application intérieure, ne fait threadMethod dans la classe B statique ont une différence fonctionnelle?

En outre, je démarre deux threads qui utilisent la même méthode dans la même classe. Chaque méthode possède-t-elle sa propre pile et sont-elles isolées les unes des autres à la fois dans la classe A et dans la classe B? Est-ce que le statique ne change vraiment rien dans ce cas?

Répondre

2

Dans ce cas, il n'y a pas de différence fonctionnelle. Chaque thread obtient sa propre pile

1

Chaque thread obtiendrait sa propre pile. Il n'y a aucune différence fonctionnelle que je peux dire entre les deux. La seule différence (évidemment) est que la version statique serait incapable d'accéder aux fonctions/variables membres.

2

Peut-être que vous pouvez être un peu plus clair. Peu importe si la fonction est déclarée statique ou non dans la plupart des langues. Chaque thread a son propre statck privé.

3

Les méthodes n'ont pas de piles, les threads le font. Dans votre exemple, threadMethod utilise uniquement des variables locales qui sont toujours privées au thread exécutant la méthode. Cela ne fait aucune différence si la méthode est static ou non car la méthode ne partage aucune donnée.

Questions connexes