同期を実証する小さなプログラムを取得しようとしていますが、何らかの理由で期待を満たしていません。ポイントは、1000 個のスレッドを作成し、それらすべてに静的な Integer オブジェクトの「合計」に 1 を加算させることです。出力は 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);
}
}