Was ist der Zweck der ScheduledFuture.get () -Methode, wenn sie aus der Methode scheduleWithFixedDelay / scheduleAtFixedRate abgerufen wird

9

Ich bin verwirrt mit dem folgenden

Ich weiß, wenn ich die Methode schedule aus der Klasse ScheduledThreadPoolExecutor verwende:

%Vor%

Ich kann später den Wert abrufen scheduledFuture.get(5, TimeUnit.SECONDS) oder scheduledFuture.get() und sollte null sein, da die Aufgabe nur einmal ausgeführt wurde und abgeschlossen ist. Und null , weil ich mit der Methodenversion shedule's Runnable und nicht mit der Methodenversion shedule's Callable arbeite. Es gemäß der API

Bis hier geht es mir gut.

Meine Frage:

Was ist der Zweck von ScheduledFuture , wenn es von der Methode scheduleWithFixedDelay (sogar von scheduleAtFixedRate ) abgerufen wird:

%Vor%

Ja, ich weiß, dass beide fixed -Methoden dieselbe Task mehrmals ausführen, bis die ScheduledThreadPoolExecutor's shutdown -Methode aufgerufen wird (sie muss alle geplanten Tasks anhalten).

Ich habe über Google nach einigen Beispielen gesucht, indem ich ScheduledFuture verwendet habe, das von scheduleWithFixedDelay zurückgegeben wurde. Ich habe nur eines mit der Methode cancel gefunden, um eine bestimmte Aufgabe abzubrechen. Aber keiner arbeitet mit get .

Ich weiß nicht, ob ich falsch liege, aber scheint nutzlos die get Methode, wenn wir mit scheduleWithFixedDelay arbeiten, denn wenn ich später benutze:

  • planedFuture.get () - es wartet darauf, und das Runnable-Objekt bleibt viele Male aktiv (run, complete, delay, run, etc ...)
  • planedFuture.get (32, TimeUnit.SECONDS) - immer erscheint TimeoutException

Ich dachte, ich sollte den Null-Wert abrufen können, da ich das Argument period der Methode scheduleWithFixedDelay verwenden kann. Ich meine : Führen Sie das Runnable-Objekt aus, warten Sie, bis es abgeschlossen ist, und verwenden Sie die Funktion "displanedFuture.get ()", um den Nullwert zu erhalten, der bestätigt, dass der Vorgang abgeschlossen ist Lauffähiges Objekt entsprechend dem period Wert usw. ....

Erläuterungen und Beispiele sind sehr willkommen

Vielen Dank im Voraus.

    
Manuel Jordan 31.07.2014, 00:16
quelle

1 Antwort

3

ScheduledFuture kann verwendet werden, um Zeit vor der nächsten Ausführung der Aufgabe zu erhalten:

%Vor%

druckt

%Vor%     
Evgeniy Dorofeev 31.07.2014, 02:40
quelle

Tags und Links