マルチスレッドの同期インクリメント関数を作成しましたが、一貫した出力が表示されません:-
$ 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);
}
}
私が見逃しているのは何ですか?