Maison > Java > javaDidacticiel > Comment les rappels peuvent-ils activer les notifications d'achèvement de tâches non bloquantes dans les exécuteurs Java ?

Comment les rappels peuvent-ils activer les notifications d'achèvement de tâches non bloquantes dans les exécuteurs Java ?

DDD
Libérer: 2024-11-18 09:38:02
original
882 Les gens l'ont consulté

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

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();
}
Copier après la connexion

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();
  }
}
Copier après la connexion

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));
Copier après la connexion

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));
    }
  }
}
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal