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?
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:
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. 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.