我正在尝试获取一个小程序来演示同步,但无论出于何种原因,它都没有达到我的期望。重点是创建 1000 个线程,并让它们都将 1 加到静态整数对象“sum”。输出应该是 1000,但我得到了不同的输出。就像 addSum() 方法根本不同步一样。我试过延迟 println,认为它打印总和的速度太快,但这不是问题所在。 我在这里缺少什么?
public class sumsync implements Runnable {
public static Integer sum = new Integer(0);
public sumsync(){
}
private synchronized void addSum(int i){
sum += i;
}
@Override
public void run() {
addSum(1);
}
}
主类:
public class sumsyncinit {
private static final int max_threads = 1000;
public static void main(String[] args) {
sumsync task = new sumsync();
Thread thread;
for(int i=0; i<max_threads;i++){
thread = new Thread(task);
thread.start();
}
System.out.println(sumsync.sum);
}
}
最佳答案
您不是在等待您的线程完成,因此您无法保证所有增量都已执行。您基本上只是保证一次只有一个线程在 addSum
方法中。您可能想使用 Futures等待结果。
关于Java 同步不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323312/