帮助初学者理解线程

时间:2010-12-14 02:31:30

标签: java multithreading

我有一系列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;
  }
}

我的猜测是线程互相打断,导致错误的结果,但我不明白在哪里或如何。

1 个答案:

答案 0 :(得分:3)

首先,似乎N是每线程迭代计数,因此它不应该是静态的。

其次,由于sum是静态成员,因此您的inc方法也应该是静态的,否则您将不会在类的静态字段上进行同步。