Meine Erwartung war, dass das Programm die Ausgabe "1000" zurückgeben würde.synchronisiert und ExecutorService auf Java 8
Jedes Mal, wenn das Programm ausgeführt wird, tritt jedoch eine andere Ausgabe auf.
Die Methode increment() der Counter-Klasse wurde synchronisiert. Wäre das nur nötig, um konkurrierende Messwerte zu vermeiden?
Was wäre der richtige Weg, um die 1000 Inkremente zu zählen?
package app;
public class Counter {
private Integer value;
public Counter(int initialValue) {
value = initialValue;
}
public synchronized void increment() {
value = value + 1;
}
public int getValue() {
return value;
}
}
package app;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
Counter contador = new Counter(0);
ExecutorService executor = Executors.newFixedThreadPool(10);
for(int i = 0; i < 1000; i++) {
executor.submit(() -> {
contador.increment();
});
}
System.out.println(contador.getValue());
}
}
Diese Frage bezieht sich nicht direkt auf die Klasse Atomicinteger. –