Вопрос

Описание

Задача A выполняется, которая может длиться от 2 до 60+с.

В то время как A работает, я запланировал Executorservice, который после 10S (задержка) печатает «запуск» каждые 5 с (фиксированная скорость).

ScheduledExecutorService scheduleNotifications = Executors
        .newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

После того, как А будет сделано, я хочу напечатать «А готово». Но только если началась моя задача планирования., то есть напечатано «бег» хотя бы один раз.

  • Если закончить до 10 -х годов, я ничего не печатаю.
  • Если A занимает более 10 с, я печатаю «бег» каждые 5 с, а затем «сделано», как только a завершен.

Как я мог сделать это без использования логического флага внутри Schduled runnable. Анкет Есть ли способ проверить, что мой сервис начался?

Это было полезно?

Решение

ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
    System.out.println("A is done.");
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top