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.");
}
Как проверила запланированное начало?
-
29-07-2022 - |
Вопрос
Описание
Задача 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
. Анкет Есть ли способ проверить, что мой сервис начался?
Решение
Не связан с StackOverflow