"fixedRate": wartet auf X millis vom Anfang der vorherigen Ausführung, bevor die nächste Ausführung gestartet wird. Wenn die aktuelle Ausführung das Intervall 'fixedRate' überschreitet, wird die nächste Ausführung in die Warteschlange gestellt, aber nur die nächste. Es wird nicht mehr Reihe von Warteschlange Hinrichtungen
private static int i = 0;
@Scheduled(initialDelay=1000, fixedRate=1000)
public void testScheduling() throws InterruptedException {
System.out.println("Started : "+ ++i);
Thread.sleep(4000);
System.out.println("Finished : "+ i);
}
Ausgabe erstellen:
gestartet: 1
Abschluss: 1 // nach 4 Sekunden
gestartet: 2 // sofort w/o für 1 Sekunde warten, wie angegeben in feste Rate
Abschluss: 2 // nach 4 Sekunden
usw.
„fixedDelay“: wartet X Millis von dem Ende einer vorherigen Ausführung vor der nächsten Ausführung beginnt. Unabhängig davon, wie viel Zeit die aktuelle Ausführung in Anspruch nimmt, wird die nächste Ausführung nach dem Hinzufügen des Intervalls "fixedDelay" zur Endzeit der aktuellen Ausführung gestartet. Die nächste Ausführung wird nicht in die Warteschlange gestellt.
private static int i = 0;
@Scheduled(initialDelay=1000, fixedRate=1000)
public void testScheduling() throws InterruptedException {
System.out.println("Started : "+ ++i);
Thread.sleep(4000);
System.out.println("Finished : "+ i);
}
Output:
gestartet: 1
Abschluss: 1 // nach 4 Sekunden
gestartet: 2 // wartet auf 1 Sekunde festgelegt, wie in fixedDelay
Abschluss: 2 // nach 4 Sekunden
gestartet: 3 // nach 1 Sekunde
und so weiter
in jeder Methode beginnt, die ich ** Thread.sleep (5000) ** zu Warten 5s verwende, jedoch ich don sehe nicht was anders – Adam
genau das gleiche, ich glaube @ nikhil7610 erklärte das richtig – ottercoder