Heim >Java >javaLernprogramm >Wie kann ich eine zeitgesteuerte Aufgabenunterbrechung in einem Java ExecutorService implementieren?
Aufgaben in einem ExecutorService mit Zeitüberschreitungen unterbrechen
Die Implementierung eines benutzerdefinierten ExecutorService, der Aufgabenunterbrechungen nach einer Zeitüberschreitung verarbeitet, kann eine Herausforderung sein. Das Java-Parallelitätsframework bietet jedoch eine praktische Lösung mit dem ScheduledExecutorService.
ScheduledExecutorService für Task-Timeouts
Ein ScheduledExecutorService ermöglicht die Planung von Aufgaben zur Ausführung nach einer bestimmten Verzögerung oder in regelmäßigen Abständen Intervalle. Durch die Nutzung dieser Funktion können Sie einen benutzerdefinierten ExecutorService erstellen, der übermittelte Aufgaben überwacht und sie unterbricht, wenn sie ein vordefiniertes Zeitlimit überschreiten.
TimeoutThreadPoolExecutor-Implementierung
Ein Ansatz zum Erstellen solcher Ein ExecutorService ist die TimeoutThreadPoolExecutor-Klasse, die den Standard-ThreadPoolExecutor erweitert. Es integriert einen ScheduledExecutorService (timeoutExecutor) und eine gleichzeitige Karte (runningTasks), um laufende Aufgaben zu verfolgen und ihre Unterbrechungen zu planen.
Funktionsweise von TimeoutThreadPoolExecutor
Nutzung
Um diesen benutzerdefinierten ExecutorService zu verwenden, instanziieren Sie a TimeoutThreadPoolExecutor mit den gewünschten Parametern und beginnen Sie mit der Übermittlung von Aufgaben. Die Aufgaben werden nach dem angegebenen Timeout unterbrochen, wenn sie nicht abgeschlossen wurden.
Alternative Methode mit Zeitplan
Ein weiterer Ansatz zum Unterbrechen lang laufender Aufgaben in einem ExecutorService ist um die von ScheduledExecutorService bereitgestellte Zeitplanmethode zu verwenden. Sie können zwei Aufgaben übermitteln: eine, die die eigentliche Aufgabe ausführt, und eine andere, die sie nach einer bestimmten Zeitüberschreitung abbricht.
Codebeispiel
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); Future handler = executor.submit(new Callable(){ ... }); executor.schedule(new Runnable(){ public void run(){ handler.cancel(); } }, 10000, TimeUnit.MILLISECONDS);
Mit dieser Methode können Sie Folgendes tun Führen Sie eine Aufgabe mit einer Zeitüberschreitung von 10 Sekunden aus. Danach wird sie abgebrochen und unterbrochen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine zeitgesteuerte Aufgabenunterbrechung in einem Java ExecutorService implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!