ScheduledThreadPoolExecutor, wie stoppen runnable Klasse JAVA

8

Ich habe den folgenden Code geschrieben:

%Vor%

Ich möchte den ScheduledThreadPoolExecutor stoppen, wenn der func () aufgerufen wird. Es muss nicht weiter arbeiten! Ich denke, ich sollte die Funktion func () innerhalb der Wähler-Klasse setzen und dann irgendeine Art von Callback erstellen. Aber vielleicht kann ich es aus der Shoot-Klasse heraus tun.

Wie kann ich es richtig lösen?

    
Khozzy 21.07.2011, 10:46
quelle

1 Antwort

20

Mit ScheduledThreadPoolExecutor können Sie Ihre Aufgabe sofort ausführen oder planen, dass sie später ausgeführt wird (Sie können auch periodische Ausführungen festlegen).

Wenn Sie also diese Klasse verwenden, um die Ausführung Ihrer Aufgabe zu stoppen, beachten Sie Folgendes:

  1. Es gibt keine Möglichkeit zu garantieren, dass ein Thread seine Ausführung stoppt. Überprüfen Sie die Thread.interrupt () -Dokumentation.
  2. Die Methode ScheduledThreadPoolExecutor.shutdown() wird so eingestellt, dass Ihre Aufgabe abgebrochen wird, und versucht nicht, Ihre Threads zu unterbrechen. Mit dieser Methode vermeiden Sie tatsächlich die Ausführung neuer Aufgaben und die Ausführung geplanter, aber nicht gestarteter Aufgaben.
  3. Die Methode ScheduledThreadPoolExecutor.shutdownNow() unterbricht die Threads, aber wie ich bereits im ersten Punkt dieser Liste gesagt habe ...

Wenn Sie den Scheduler stoppen möchten, müssen Sie Folgendes tun:

%Vor%

Was aber, wenn Sie nur eine Aufgabe stoppen müssen?

Die Methode ScheduledThreadPoolExecutor.schedule(...) gibt eine ScheduleFuture zurück, die eine Darstellung Ihrer bereits geplanten Aufgabe darstellt. Sie können also die Methode ScheduleFuture.cancel(boolean mayInterruptIfRunning) aufrufen, um Ihre Aufgabe abzubrechen und zu versuchen, sie bei Bedarf zu unterbrechen.

    
ggarciao 03.08.2011, 14:24
quelle

Tags und Links