2013-07-02 17 views
7

Ich habe diesen Code:ScheduledExecutorService, wie Sie die Aktion stoppen, ohne den Executor zu stoppen?

ScheduledExecutorService scheduledExecutor; 
..... 
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
    new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS); 

Nach einigem Ereignisse I Aktion aufhören sollte, die in run() Methode der SomethingDoer erklärt, die Runnable implementiert.

Wie kann ich das tun? Ich kann den Executor nicht herunterfahren, ich sollte nur meine periodische Aufgabe widerrufen. Kann ich result.get() dafür verwenden? Und wenn ich kann, sag mir bitte, wie es funktionieren wird.

Antwort

12

Verwenden Sie result.cancel(). Die ScheduledFuture ist das Handle für Ihre Aufgabe. Sie müssen diese Aufgabe abbrechen und sie wird nicht mehr ausgeführt.

Eigentlich ist cancel(boolean mayInterruptIfRunning) die Signatur und es mit true Parametern verwendet verursacht Thread eine aktuell laufenden exection der mit dem interrupt() Anruf unterbrochen werden. Dies wird eine unterbrochene Ausnahme auslösen, wenn der Thread in einem unterbrechenden Unterbrechungsaufruf wie Semaphore.acquire() wartet. Beachten Sie, dass cancel nur dafür sorgt, dass die Aufgabe nicht mehr ausgeführt wird, sobald sie die Ausführung gestoppt hat.

4

Sie können die cancel() Methode von Ihrem ScheduledFuture Objekt verwenden. Nach dem Abbrechen werden keine weiteren Aufgaben ausgeführt.

Wenn Sie Ihre derzeit laufende Task beenden möchten, müssen Sie Ihre run Methode codieren, so dass es empfindlich ist und true zum cancel() Methode übergeben zu unterbricht eine Unterbrechung zu beantragen.