Heim >Java >javaLernprogramm >Wie können Rückrufe nicht blockierende Benachrichtigungen über den Abschluss von Aufgaben in Java-Executoren ermöglichen?
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(); }
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(); } }
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));
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)); } } }
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);
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!