Я читаю книгу java8 и сталкиваюсь с разницей между scheduleAtFixedRate
и scheduleWithFixedDelay
методами от ScheduledExecutorService
.
Я понимаю разницу между этими двумя методами в книге, однако, когда я пытался написать простой код. Не очень понятно, почему scheduleAtFixedRate
ведет себя синхронно .
Как видите, я выделяю 100 потоков в пуле. Планировщик будет отправлять новое задание каждые 1 мс, а для каждого задания задержка составляет 1 с.
ScheduledExecutorService s = Executors.newScheduledThreadPool(100);
s.scheduleAtFixedRate(() -> {
int num = new Random().nextInt(100);
System.out.println("Hello World" + num);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Finished" + num);
}, 0, 1, TimeUnit.MILLISECONDS);
Но почему я получаю этот вывод? Новая задача будет выполняться только после другой.
Hello World94
Finished94
Hello World14
Finished14
Hello World90
Finished90
Hello World26
Finished26