2010-12-14 1 views
0

を理解し、彼らは間違った結果を生成します。ここでの問題は何ですか?ヘルプ初心者は、私は(下見て)MyThreadsランニングの配列を持っているスレッド

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

私の推測では、スレッドが互いに干渉して間違った結果を引き起こしていると思いますが、どこでどのように理解できません。

+2

どのようにこれらのスレッドを実行していますか、どのような結果が期待されますか? –

+0

どのような結果が正しくありませんか?結果として何を期待していますか?開始して確認するコードスニペットについてはどうですか? –

+0

静的変数を増分しています。 MyThreadのすべてのインスタンスで共有される変数で何が起こると思いますか? – duffymo

答えて

3

まず、Nは、スレッドごとの繰り返し回数であることが表示されますので、それは静的であるべきではありません。

sumは静的メンバーなので、incメソッドも静的である必要があります。そうしないと、クラスの静的フィールドで同期されません。

+1

心配しないでください。私はこれを自分で考え出しました。それはあまり書かれていない質問だった。 – dfetter88

関連する問題