2010-12-14 7 views
0

J'ai un tableau de MyThreads (vu ci-dessous) en cours d'exécution, mais ils produisent des résultats incorrects. Quel est le problème ici?Aide débutant à comprendre les threads

import java.util.*; 
class MyThread extends Thread { 
    public static long N; 
    public static long sum = 0; 
    synchronized public void inc() { 
    sum++; 
    } 
    public void run() { 
    for (long i = 0; i < N; i++) { 
     inc(); 
    } 
    } 
    public MyThread(long num) { 
    N = num; 
    } 
} 

Je suppose que les fils sont interrompaient les uns des autres, ce qui provoque des résultats incorrects, mais je ne comprends pas où ni comment.

+2

Comment exécutez-vous ces threads, et quels résultats attendez-vous? –

+0

Quels sont les résultats incorrects? Qu'attendez-vous comme résultats? Que diriez-vous de l'extrait de code où vous démarrez et vérifiez-les? –

+0

Vous incrémentez une variable statique. Qu'attendez-vous d'une variable partagée par toutes les instances de MyThread? – duffymo

Répondre

3

D'abord, il apparaît que N est un nombre d'itérations par thread, il ne doit donc pas être statique.

Ensuite, puisque sum est un membre statique, votre méthode inc devrait aussi être statique, sinon vous ne serez pas synchronisé sur les champs statiques de la classe.

+1

Nevermind. J'ai compris cela par moi-même. C'était une question mal écrite. – dfetter88