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 –
- 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. - 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’objetCallable
ait terminé l’exécution de la méthodecall()
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 exceptionInterruptedException
. Si la méthodecall()
lève une exception, cette méthode lève une exceptionExecutionException
.
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!!