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
DDDoriginal
2024-11-18 09:38:02883parcourir

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();
}

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!

Déclaration:
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