Exemple Futur appelable Java

L’un des avantages du framework Java executor est que nous pouvons exécuter des tâches simultanées qui peuvent renvoyer un seul résultat après le traitement des tâches. L’API de concurrence Java y parvient avec les deux interfaces Callable et Future suivantes.

Interfaces appelables et futures Java

1.1. L’interface appelable

Callable a la méthode call(). Dans cette méthode, nous devons implémenter la logique d’une tâche. L’interface Callable est une interface paramétrée, ce qui signifie que nous devons indiquer le type de données que la méthode call() renverra.

2.2. L’interface Future

Future a des méthodes pour obtenir le résultat généré par un objet Callable et pour gérer son état.

Exemple futur appelable Java

Dans cet exemple, Nous créons un FactorialCalculator de type Callable. Cela signifie que nous remplacerons sa méthode call() et après le calcul, nous renverrons le résultat de la méthode call(). Ce résultat peut ensuite être récupéré à partir de la référence Future détenue par le programme principal.

Testons maintenant la calculatrice factorielle ci-dessus en utilisant deux threads et 4 nombres.

Sortie du programme.

Ici, nous avons envoyé un objet Callable à exécuter dans un exécuteur en utilisant la méthode submit(). Cette méthode reçoit un objet Callable en paramètre et renvoie un objet Future que nous pouvons utiliser avec deux objectifs principaux –

  1. Nous pouvons contrôler l’état de la tâche – nous pouvons annuler la tâche et vérifier si elle est terminée. Pour cela, nous avons utilisé la méthode isDone() pour vérifier si les tâches étaient terminées.
  2. Nous pouvons obtenir le résultat renvoyé par la méthode call(). Pour cela, nous avons utilisé la méthode get(). Cette méthode attend que l’objet Callable ait terminé l’exécution de la méthode call() et ait renvoyé son résultat.

    Si le thread est interrompu pendant que la méthode get() attend le résultat, il déclenche une exception InterruptedException. Si la méthode call() lève une exception, cette méthode lève une exception ExecutionException.

L’interface Future fournit une autre version de la méthode get(), c’est-à-dire get(longtimeout, TimeUnitunit). Cette version de la méthode get, si le résultat de la tâche n’est pas disponible, l’attend pendant la durée spécifiée. Si la période spécifiée passe et que le résultat n’est pas encore disponible, la méthode renvoie une valeur null.

Bon apprentissage!!

Ce message vous a-t-il été utile?

Faites-nous savoir si vous avez aimé l’article. C’est la seule façon de nous améliorer.
Oui
Non