Java 同步不工作

标签 java synchronization

我正在尝试获取一个小程序来演示同步,但无论出于何种原因,它都没有达到我的期望。重点是创建 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/

相关文章:

Java:停止没有同步的线程

java - 在Group之上展开Android的ExpandableListView Children

java - Maven 和 Eclipse : loading default properties in maven library project and use it in runnable Jar

java - Android:Dagger 2 和构造函数注入(inject)

java - 等待计时器在 Java 中完成

c# - 即使我锁定了我的列表,它也不是线程安全的

java - Drools:在运行时添加和删除规则

JAVA not in gzip format错误

JavaFX - 如何同步CustomTab(扩展Tab)和TabPane

android - 如何在 SyncAdapter 完成 Sync 后刷新 Android ListView