Heim > Java > javaLernprogramm > Wie kann ich eine zeitgesteuerte Aufgabenunterbrechung in einem Java ExecutorService implementieren?

Wie kann ich eine zeitgesteuerte Aufgabenunterbrechung in einem Java ExecutorService implementieren?

Patricia Arquette
Freigeben: 2024-11-28 01:39:13
Original
716 Leute haben es durchsucht

How Can I Implement Timed Task Interruption in a Java ExecutorService?

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

  • beforeExecute: Wenn eine Aufgabe übermittelt wird, ist sie geplant Unterbrechung mit timeoutExecutor. Ein ScheduledFuture wird zurückgegeben und in RunningTasks gespeichert und ordnet die Aufgabe ihrer geplanten Unterbrechungsaufgabe zu.
  • afterExecute: Sobald die Aufgabe abgeschlossen ist, wird ihr entsprechendes ScheduledFuture aus RunningTasks entfernt und abgebrochen, wodurch die Aufgabe unterbrochen wird falls es noch nicht abgeschlossen ist.
  • Herunterfahren: Wird ordnungsgemäß heruntergefahren Fahren Sie ThreadPoolExecutor und ScheduledExecutorService herunter.
  • shutdownNow: Fährt ThreadPoolExecutor und ScheduledExecutorService zwangsweise herunter.

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage