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.");
}
كيف بدأت التحقق من جدولة executorservice؟
-
29-07-2022 - |
سؤال
وصف
يتم تشغيل المهمة A ، والتي يمكن أن تستمر من 2s إلى 60+s.
أثناء تشغيل A ، حددت موعد خدمة ExecutorSorserity بعد 10s (تأخير) ، ستطبع "تشغيل" كل 5s (سعر ثابت).
ScheduledExecutorService scheduleNotifications = Executors
.newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("A is running");
}
}, 10, 5, TimeUnit.SECONDS);
بمجرد الانتهاء من A ، أود طباعة "A قد انتهى". ولكن فقط إذا بدأت مهمة SchedeDexecutorService, ، بمعنى أنه طبع "الجري" مرة واحدة على الأقل.
- إذا انتهى قبل العاشرة من القرن الماضي ، فأنا لا أطبع أي شيء.
- إذا استغرق الأمر أكثر من 10s ، فأنا طباعة "تشغيل" كل 5s ثم "تم" بمجرد الانتهاء من A.
كيف يمكنني فعل ذلك دون استخدام علم منطقي داخل schduled runnable
. هل هناك طريقة للتحقق من أن خدمتي بدأت؟
المحلول
لا تنتمي إلى StackOverflow