Exécuteurs Java : notifications non bloquantes pour l'achèvement des tâches
Lorsque vous êtes confronté au traitement de nombreuses tâches via un service d'exécution, le blocage peut devenir un problème important obstacle dû aux contraintes d’espace de la pile. Pour contourner ce problème, envisagez d'utiliser une approche de rappel, dans laquelle les tâches soumettent des notifications non bloquantes une fois terminées.
Création d'une interface de rappel
Définissez une interface de rappel encapsulant le message souhaité. paramètres pour la notification d’achèvement. Dans l'exemple de code fourni :
public interface Callback { void complete(); }
Encapsulation des tâches avec un rappel
Utilisez cette interface de rappel pour créer une classe wrapper pour les tâches exécutables :
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(); } }
Soumission de tâches avec rappels
Une fois le wrapper de rappel en place, soumettez les tâches au service exécuteur comme suit :
ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(new CallbackTask(task, callback));
Rappel de notification
Implémentez le rappel pour gérer les notifications d'achèvement et exécutez la tâche suivante de la file d'attente :
public class CallbackImpl implements Callback { private Queue<Task> queue; @Override public void complete() { if (!queue.isEmpty()) { executor.submit(new CallbackTask(queue.poll(), this)); } } }
CompletableFuture de Java 8
Depuis Java 8, la classe CompletableFuture offre une approche plus complète pour créer et gérer des processus asynchrones :
CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work); f.thenAccept(listener::notify);
Ce code crée un CompletableFuture représentant la tâche asynchrone et définit un rappel à déclencher une fois son achèvement terminé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!