Проще говоря, я пытаюсь увидеть разницу при использовании ключевого слова synchronized над простым выполнением функции над потоками без блокировок вообще.
В этом коде:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;
public class mainClass {
static int count=0;
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
Runnable r =new Runnable() {
public synchronized void run() {
count = count + 1;
}
};
IntStream.range(0, 10000)
.forEach(i -> executor.submit(r::run));
executor.shutdown();
System.out.println(count); // 10000
}
}
Он не работает, как я и предполагал, он работает, он возвращает 10000 примерно за 40% прогонов. Это почему? В чем проблема?
Я думал, что запуск функции выполняется только 1 потоком за раз, поэтому проблем не должно быть, но, очевидно, я ошибаюсь.