Dies ist für Java Akka.Was passiert, wenn ein Runnable eines wiederkehrenden Akka-Schedulers länger dauert als die wiederkehrende Zeit?
Lassen Sie uns sagen, dass ich einen Scheduler Telefonierens:
...
FiniteDuration interval = new FiniteDuration(30L, TimeUnit.SECONDS);
actorSystem.scheduler().schedule(delay, interval, action, actorSystem.dispatcher());
wo action
der Klasse ist SomeRunnable
:
public class SomeRunnable implements Runnable {
@Override
public void run() {
Thread.sleep(60000);
}
}
So alle 30 Sekunden wird der Planer die Aktion ausgeführt, die für 60 schlafen Sekunden. Wenn ich den Code ausführe, scheint es so, als würde der erste Schlaf beendet, ein zweiter beginnt sofort. Was genau passiert hier? Warum passiert das?
Entschuldigung, wenn dies zu vage ist. Vielen Dank!
Der Scheduler beendet seine endliche Zyklusdauer, aber er wartet auf den Abschluss seines vorherigen Threads. Daher wird sofort nach dem Ende des Schlafs der nächste Thread gestartet. Aber bitte erläutern Sie, was Sie erreichen möchten, Sie möchten den Scheduler alle 30 Sekunden ausführen, auch wenn der vorherige Thread nicht abgeschlossen ist? Oder möchten Sie nach jedem Thread 30 Sekunden warten? –
Also nur zur Klarstellung, Sie sagen, dass der Scheduler warten wird, bis der vorherige Thread die Ausführung beendet hat, um den nächsten zu starten? Ich möchte den Scheduler alle 30 Sekunden ausführen, auch wenn der vorherige Thread nicht abgeschlossen ist. Wenn der vorherige Thread jedoch nicht abgeschlossen ist, möchte ich ihn beenden. –