Heim > Java > javaLernprogramm > Wie können Rückrufe nicht blockierende Benachrichtigungen über den Abschluss von Aufgaben in Java-Executoren ermöglichen?

Wie können Rückrufe nicht blockierende Benachrichtigungen über den Abschluss von Aufgaben in Java-Executoren ermöglichen?

DDD
Freigeben: 2024-11-18 09:38:02
Original
892 Leute haben es durchsucht

How Can Callbacks Enable Non-Blocking Task Completion Notifications in Java Executors?

Java-Executors: Nicht blockierende Benachrichtigungen für den Abschluss von Aufgaben

Wenn Sie mit der Verarbeitung zahlreicher Aufgaben über einen Executor-Dienst konfrontiert werden, kann das Blockieren von Bedeutung sein Hindernis aufgrund von Platzbeschränkungen im Stapel. Um dieses Problem zu umgehen, sollten Sie einen Callback-Ansatz in Betracht ziehen, bei dem Aufgaben nach Abschluss nicht blockierende Benachrichtigungen senden.

Erstellen einer Callback-Schnittstelle

Definieren Sie eine Callback-Schnittstelle, die das Gewünschte kapselt Parameter für die Abschlussbenachrichtigung. Im bereitgestellten Codebeispiel:

public interface Callback {
  void complete();
}
Nach dem Login kopieren

Aufgaben mit einem Rückruf umschließen

Verwenden Sie diese Rückrufschnittstelle, um eine Wrapper-Klasse für ausführbare Aufgaben zu erstellen:

class CallbackTask implements Runnable {
  private final Runnable task;
  private final Callback callback;

  CallbackTask(Runnable task, Callback callback) {
    this.task = task;
    this.callback = callback;
  }

  @Override
  public void run() {
    task.run();
    callback.complete();
  }
}
Nach dem Login kopieren

Aufgaben senden mit Rückrufe

Mit dem Callback-Wrapper senden Sie Aufgaben wie folgt an den Executor-Service:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(new CallbackTask(task, callback));
Nach dem Login kopieren

Benachrichtigungsrückruf

Implementieren Der Rückruf verarbeitet Abschlussbenachrichtigungen und führt die nächste Aufgabe aus queue:

public class CallbackImpl implements Callback {
  private Queue<Task> queue;

  @Override
  public void complete() {
    if (!queue.isEmpty()) {
      executor.submit(new CallbackTask(queue.poll(), this));
    }
  }
}
Nach dem Login kopieren

CompletableFuture von Java 8

Seit Java 8 bietet die CompletableFuture-Klasse einen umfassenderen Ansatz zum Erstellen und Verwalten asynchroner Prozesse:

CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work);
f.thenAccept(listener::notify);
Nach dem Login kopieren

Dieser Code erstellt ein CompletableFuture, das die asynchrone Aufgabe darstellt, und definiert einen auszulösenden Rückruf nach seiner Fertigstellung.

Das obige ist der detaillierte Inhalt vonWie können Rückrufe nicht blockierende Benachrichtigungen über den Abschluss von Aufgaben in Java-Executoren ermöglichen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage