Я играю с ScheduledExecutorService
. Что я хочу сделать, так это запустить простой тикер (один тик в секунду) и запланировать другую задачу позже (через пять секунд), которая отменяет первую. А затем заблокируйте основной поток, пока все не завершится, что должно произойти после завершения обеих задач (+- пять секунд).
Это мой код:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
Runnable tickTask = () -> System.out.println("Tick");
ScheduledFuture<?> scheduledTickTask = executor.scheduleAtFixedRate(tickTask, 0, 1, TimeUnit.SECONDS);
Runnable cancelTask = () -> scheduledTickTask.cancel(true);
executor.schedule(cancelTask, 5, TimeUnit.SECONDS);
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
Проблема, которая меня удивляет, заключается в том, что он БЛОКИРУЕТСЯ, как если бы все еще выполнялись какие-то задачи. Почему? cancelTask
должно закончиться немедленно, а scheduledTickTask
только что отменили, так в чем проблема?