我有一系列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;
}
}
我的猜测是线程互相打断,导致错误的结果,但我不明白在哪里或如何。
答案 0 :(得分:3)
首先,似乎N
是每线程迭代计数,因此它不应该是静态的。
其次,由于sum
是静态成员,因此您的inc
方法也应该是静态的,否则您将不会在类的静态字段上进行同步。