В настоящее время я изучаю параллелизм Java. И я очень удивлен тем, как ведет себя код.Странное поведение кодового кода
import java.util.concurrent.*;
public class Exercise {
static int counter = 0;
static synchronized int getAndIncrement() {
return counter++;
}
static class Improper implements Runnable {
@Override
public void run() {
for (int i = 0; i < 300; i++) {
getAndIncrement();
}
}
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 300; i++) {
executorService.submit(new Improper());
}
executorService.shutdown();
System.out.println(counter);
}
}
Не должно ли оно выводить 90000 все время? Вместо этого результат различается все время.
Попробуйте использовать 'AtomicInteger'. –
Подумайте, вам просто нужно дождаться завершения службы ExecutorService http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice –