Maison  >  Article  >  Java  >  Application efficace de la technologie sous-jacente Java : comment implémenter la programmation asynchrone et CompletableFuture

Application efficace de la technologie sous-jacente Java : comment implémenter la programmation asynchrone et CompletableFuture

WBOY
WBOYoriginal
2023-11-08 12:16:541194parcourir

Application efficace de la technologie sous-jacente Java : comment implémenter la programmation asynchrone et CompletableFuture

Application efficace de la technologie sous-jacente Java : Comment implémenter la programmation asynchrone et CompletableFuture

Introduction :
Dans le développement de logiciels modernes, la programmation asynchrone est devenue l'une des technologies importantes pour améliorer les performances du système et l'expérience utilisateur. En tant que langage de programmation largement utilisé, Java fournit une variété de mécanismes pour implémenter la programmation asynchrone. Parmi eux, CompletableFuture est un outil de programmation asynchrone puissant et flexible qui peut simplifier le code et améliorer l'efficacité. Cet article présentera ce qu'est la programmation asynchrone et comment utiliser CompletableFuture pour obtenir une programmation asynchrone efficace. Et illustrez-le avec des exemples de code spécifiques.

1. Qu'est-ce que la programmation asynchrone ?

La programmation asynchrone est un modèle de programmation qui permet à un programme d'effectuer une opération tout en effectuant d'autres opérations. Dans la programmation synchrone traditionnelle, lorsqu'une opération se produit, le programme attend la fin de l'opération avant de passer à l'étape suivante. En programmation asynchrone, le programme peut continuer à effectuer d'autres opérations sans attendre la fin de l'opération en cours.

La programmation asynchrone peut améliorer les performances de concurrence du système et permettre au système de mieux faire face aux scénarios de concurrence élevée. Dans le développement réel, les opérations asynchrones courantes incluent les requêtes réseau, la lecture et l'écriture de fichiers, les requêtes de base de données, etc. En rendant ces opérations asynchrones, le système peut utiliser les ressources plus efficacement et améliorer la vitesse de réponse et le débit du système.

2. Comment implémenter la programmation asynchrone en Java

Java offre diverses façons d'implémenter la programmation asynchrone, telles que le multithread, les fonctions de rappel, Future et CompletableFuture, etc. Cet article se concentrera sur CompletableFuture, car il s'agit d'un outil de programmation asynchrone très puissant ajouté à Java 8.

CompletableFuture est une classe d'implémentation spéciale en Java qui peut gérer très facilement les tâches asynchrones. Dans CompletableFuture, vous pouvez utiliser des appels en chaîne pour combiner plusieurs opérations asynchrones afin de former un processus de programmation asynchrone élégant et efficace.

Voici un exemple de programmation asynchrone utilisant CompletableFuture :

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // 异步执行任务,返回结果
    return "Hello, CompletableFuture!";
}).thenApplyAsync(result -> {
    // 对任务结果进行处理,返回新的结果
    return result.toUpperCase();
}).whenComplete((result, exception) -> {
    // 完成处理操作
    if (exception != null) {
        // 处理异常情况
        System.out.println("Exception occurred: " + exception.getMessage());
    } else {
        // 处理正常情况
        System.out.println(result);
    }
});

Dans l'exemple ci-dessus, une nouvelle tâche asynchrone est créée à l'aide de la méthode CompletableFuture.supplyAsync. Les résultats de la tâche peuvent être traités via la méthode thenApplyAsync, puis un nouvel objet CompletableFuture est renvoyé. Enfin, les résultats d'exécution de la tâche asynchrone sont traités via la méthode whenComplete. CompletableFuture.supplyAsync方法创建了一个新的异步任务。通过thenApplyAsync方法可以对任务结果进行处理,然后返回一个新的CompletableFuture对象。最后,通过whenComplete方法对异步任务的执行结果进行处理。

三、CompletableFuture高级特性的应用

在实际的开发中,CompletableFuture还提供了其他一些高级的特性,如异常处理、超时控制、多任务合并、异步任务等待等。下面以具体的示例来演示这些特性的应用。

异常处理:

CompletableFuture.supplyAsync(() -> {
    throw new RuntimeException("Oops, exception occurred!");
}).exceptionally(ex -> {
    // 处理异常情况
    System.out.println("Exception occurred: " + ex.getMessage());
    return "default value";
});

通过exceptionally方法可以对异步任务中发生的异常进行处理,返回一个默认值或者其他补救措施。

超时控制:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // 异步执行任务
    return "Hello, CompletableFuture!";
}).orTimeout(1, TimeUnit.SECONDS);

通过orTimeout方法可以控制异步任务的超时时间,如果任务在指定时间内未能完成,则会抛出TimeoutException异常。

多任务合并:

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "CompletableFuture!");
CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (result1, result2) -> {
    // 合并任务结果
    return result1 + ", " + result2;
});

通过thenCombine方法可以将多个异步任务的结果合并起来,形成一个新的CompletableFuture对象,然后对合并后的结果进行处理。

异步任务等待:

CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "Hello";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "CompletableFuture!");

CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);

try {
    // 等待所有异步任务执行完毕
    allFutures.get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

通过allOf

3. Application des fonctionnalités avancées de CompletableFuture


En développement réel, CompletableFuture fournit également d'autres fonctionnalités avancées, telles que la gestion des exceptions, le contrôle des délais d'attente, la fusion multi-tâches, l'attente de tâches asynchrones, etc. Ce qui suit utilise des exemples spécifiques pour démontrer l’application de ces fonctionnalités.

Gestion des exceptions :

rrreee

Utilisez la méthode exceptionnellement pour gérer les exceptions qui se produisent dans les tâches asynchrones et renvoyer une valeur par défaut ou d'autres solutions.

🎜Contrôle du délai d'attente : 🎜rrreee🎜Vous pouvez contrôler le délai d'expiration des tâches asynchrones via la méthode orTimeout Si la tâche ne parvient pas à se terminer dans le délai spécifié, une exception TimeoutException sera générée. être jeté. 🎜🎜Fusion multi-tâches : 🎜rrreee🎜Utilisez la méthode thenCombine pour combiner les résultats de plusieurs tâches asynchrones afin de former un nouvel objet CompletableFuture, puis fusionnez les résultats pour le traitement . 🎜🎜Tâche asynchrone en attente : 🎜rrreee🎜La méthode allOf peut faire attendre le thread actuel que toutes les tâches asynchrones soient exécutées avant de continuer à exécuter le code suivant. 🎜🎜Conclusion : 🎜Cet article présente le concept de programmation asynchrone Java et l'utilisation de CompletableFuture. En utilisant CompletableFuture, nous pouvons simplifier la complexité de la programmation asynchrone et améliorer les performances du système et la vitesse de réponse. Dans le même temps, CompletableFuture fournit également des fonctionnalités avancées, telles que la gestion des exceptions, le contrôle des délais d'attente, la fusion multitâche, etc., qui peuvent être appliquées de manière flexible en fonction de besoins spécifiques. 🎜🎜En développement réel, un grand nombre d'opérations d'E/S peuvent être optimisées grâce à une programmation asynchrone pour améliorer le débit du système. En utilisant rationnellement la technologie de programmation asynchrone, nous pouvons mieux faire face aux scénarios à forte concurrence et améliorer l'expérience utilisateur du système. 🎜🎜Si vous n'avez pas encore utilisé CompletableFuture, alors je vous encourage à l'essayer, je pense que vous serez attiré par ses fonctions puissantes. J'espère que cet article pourra vous aider à comprendre et à utiliser CompletableFuture. Travaillons ensemble pour créer des applications Java plus efficaces ! 🎜

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