マルチスレッドの同期インクリメント関数を作成しましたが、一貫した出力が表示されません:-
$ java Main
count: 999883
$ java Main
count: 1000000
$ java Main
count: 999826
$ java Main
count: 1000000
$ java Main
count: 1000000
私は同期されたカウンターを持っています:-
public class Counter {
    public int count;
    synchronized void inc() {
        count = count+1;
    }
    int getCount() {
        return count;
    }
}
カウンター オブジェクトで初期化され、それを 1000 回インクリメントするスレッド クラス:-
public class CountPrimesRunnable implements Runnable {
    private Counter c;
    public CountPrimesRunnable(Counter c) {
        this.c = c;
    }
    public void run() {
        for (int i = 0; i < 1000; i++)
            c.inc();
    }
}
そして、一度に 1000 個のスレッドを作成する Main クラス:-
public class Main {
    public static void main(String[] args) {
        int numberOfThreads = 1000;
        Thread[] worker = new Thread[numberOfThreads];
        Counter c = new Counter();
        for (int i = 0; i < numberOfThreads; i++)
            worker[i] = new Thread(new CountPrimesRunnable(c));
        for (int i = 0; i < numberOfThreads; i++)
            worker[i].start();
        System.out.println("count: " + c.count);
    }
}
私が見逃しているのは何ですか?