Запуск потоков с интервалом (scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS)) - SheduledExecutorService
Существует вот такой пример кода
public class ExecutorsRunnableRun {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(4);
IntStream.range(0, 7).forEach(
i -> {
Task task = new Task(i);
scheduledExecutorService.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);
}
);
scheduledExecutorService.shutdown();
try {
scheduledExecutorService.awaitTermination(1000, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static class Task implements Runnable {
private final int idThread;
private Task(int idThread) {
this.idThread = idThread;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() +
": Запущен в итерациии № " + this.idThread);
}
}
я хотел бы увидеть, что поток запуститься с задеркжой в 1 секунду (относительно момента, когда мы укзалали задачу потоку, но не запускаем ее сразу, а через некоторое время)
затем поток должен выполнить еще одну задачу, но через 2 секунды.
Итераций 7, и потоки должны выполнить задачу 14 раз, и при этом будут переиспользоваться те потоки, которые созданы в фиксированном пуле.
Так ?
scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS)
Как я понимаю, как только приложение запуститься, 1-й поток запуститься не сразу, а через 1 секунду, и затем выполнит задачу.
И эта же задача будет выполнена через 2 секунды снова.
Затем на следующей итерации алгоритм повториться.
Таким образом, за каждую итерацию, каждый поток выполнит задачу - 2 раза.
Так ?
Но потоки не успевают выполниться и приложение останавливается.
Почему ?
Для того, чтобы увидеть работу такого механизма, мне пришлось формировать задачи с задержкой.
IntStream.range(0, 7).forEach(
i -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Task task = new Task(i);
scheduledExecutorService.scheduleAtFixedRate(task, 1, 2, TimeUnit.SECONDS);
}
);
Тогда не вижу смысла в таком планировщике.
Кто знает, разъясните данный механизм.