Démarrage futur complet (futur) A continué
CompletableFuture
Comme le montre la figure, «Completable Furure» est
Il implémente les interfaces «Future» et «CompletionStage».
CompletionStage
est une interface introduite dans Java 8.
CompletableFuture représente le traitement asynchrone et conserve le résultat lorsqu'il devient disponible.
CompletableFuture
Un futur qui peut être complété explicitement (en définissant sa valeur et son statut). Prend en charge les fonctions et les actions dépendantes qui se produisent à la fin et peuvent être utilisées comme étape d'achèvement. CompletableFuture@Oracle
Cette "prise en charge des fonctions et actions dépendantes qui se produisent à la fin" est une caractéristique majeure de "Completable Future"
En plus de la fonctionnalité "Future", "vous n'aurez pas à attendre un traitement fastidieux" Vous pouvez faire ce qui suit:
Lorsque le résultat du processus devient disponible Vous pouvez émettre des notifications et exécuter des rappels définis par des expressions lambda et des références de méthode.
public Future<Double> getDoubleAsync(String variable){
//Créer un avenir complet contenant les résultats du calcul
CompletableFuture<Double> futureValue = new CompletableFuture<>();
new Thread( () -> { //Traiter le traitement de manière asynchrone dans un autre thread
try {
//Processus chronophage
double price = doSomeLongComputation(variable);
//Définissez la valeur résultante
futureValue.complete(price);
} catch (Exception ex) {
futureValue.completeExceptionally(ex);
}
}).start();
//Renvoie le futur sans attendre le calcul
return futureValue;
}
Comment appeler la méthode ci-dessus
//Le type de retour est Future<Double>
Future<Double> futureValue = getDoubleAsync("test");
try {
//Appelez ici. Bloqué si la valeur n'est pas disponible
double value = futureValue.get();
System.out.printf("value is %.2f%n", value);
} catch (ExecutionException | InterruptedException e) {
throw new RuntimeException(e);
}
SupplyAsync
La classe CompletableFuture
a plusieurs méthodes de fabrique.
supplyAsync(Supplier supplier) Renvoie un nouveau CompletableFuture dans lequel la tâche exécutée dans ForkJoinPool.commonPool () appelle le fournisseur spécifié et se termine de manière asynchrone en utilisant les valeurs obtenues. supplyAsync@Oracke
public static Future<Double> getDoubleAsyncHandy(String arg) {
return CompletableFuture.supplyAsync(() -> doSomeLongComputation(arg));
}
Vous pouvez facilement écrire CompletableFuture
comme ci-dessus en utilisant la méthode supplyAsync
.
Recommended Posts