Home Java javaTutorial How to use CompletableFuture to implement asynchronous concurrent programming in Java?

How to use CompletableFuture to implement asynchronous concurrent programming in Java?

May 04, 2024 pm 05:03 PM
java Asynchronous concurrent programming

Use CompletableFuture to implement asynchronous concurrent programming in Java: Create CompletableFuture: Create a CompletableFuture through CompletableFuture.supplyAsync(), which receives a parameterless method as a parameter and returns a value. Handling completion situations: Use the whenComplete(), thenApply(), thenAccept(), exceptionally(), and handle() methods to handle task completion, exception, and cancellation situations. Combining CompletableFutures: Chain two CompletableFutures using the thenCompose() method. Practical case: Shows how to use CompletableFuture to get a list of users from the database in parallel and get each user's details from a remote API.

如何在 Java 中使用 CompletableFuture 实现异步并发编程?

#How to use CompletableFuture to implement asynchronous concurrent programming in Java?

Introduction

CompletableFuture is a concurrency utility class introduced in Java 8 that allows you to execute tasks asynchronously and handle their completion. It provides a more elegant and simplified way to manage concurrency than traditional threads.

Basic usage

To create a CompletableFuture, you can use the CompletableFuture.supplyAsync() method, which accepts a Supplier as a parameter. Supplier is a method with no parameters and returns a value.

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

Handling completion

One of the main functions of CompletableFuture is the ability to handle task completion. It provides a variety of methods to handle completion, exception and cancellation situations:

  • whenComplete(): Execute the specified action after the task is completed, regardless of whether the completion is successful or not.
  • thenApply(): Execute the specified function and return a new value after the task is successfully completed.
  • thenAccept(): Execute the specified consumer after the task is successfully completed.
  • exceptionally(): Execute the specified exception handler after the task fails and return a new value.
  • handle(): Execute the specified function after the task is completed, regardless of whether the task is completed successfully, and return a new value.

Combining CompletableFuture

CompletableFuture can be combined to create more complex parallel tasks. For example, you can use the thenCompose() method to chain together two CompletableFutures:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2);

future1.thenCompose(x -> future2.thenApply(y -> x + y));

Practical case

Suppose we have the following tasks Parallel execution is required:

  • Get the user list from the database
  • Get the details of each user from the remote API

We can use CompletableFuture to Implement it:

CompletableFuture<List<User>> futureUsers = CompletableFuture.supplyAsync(() -> getUsersFromDatabase());

CompletableFuture<Map<Integer, UserDetail>> futureDetails = CompletableFuture.supplyAsync(() -> {
    List<User> users = futureUsers.get();
    return getUsersDetailsFromApi(users);
});

CompletableFuture<List<User>> combinedFuture = futureUsers.thenCombine(futureDetails, (users, details) -> {
    for (User user : users) {
        user.setDetails(details.get(user.getId()));
    }
    return users;
});

This example shows how to use CompletableFuture to fetch data from different sources in parallel and combine them.

The above is the detailed content of How to use CompletableFuture to implement asynchronous concurrent programming in Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1582
276
How to send and receive messages over a WebSocket in Java How to send and receive messages over a WebSocket in Java Aug 16, 2025 am 10:36 AM

Create a WebSocket server endpoint to define the path using @ServerEndpoint, and handle connections, message reception, closing and errors through @OnOpen, @OnMessage, @OnClose and @OnError; 2. Ensure that javax.websocket-api dependencies are introduced during deployment and automatically registered by the container; 3. The Java client obtains WebSocketContainer through the ContainerProvider, calls connectToServer to connect to the server, and receives messages using @ClientEndpoint annotation class; 4. Use the Session getBasicRe

phpMyAdmin security best practices phpMyAdmin security best practices Aug 17, 2025 am 01:56 AM

To effectively protect phpMyAdmin, multiple layers of security measures must be taken. 1. Restrict access through IP, only trusted IP connections are allowed; 2. Modify the default URL path to a name that is not easy to guess; 3. Use strong passwords and create a dedicated MySQL user with minimized permissions, and it is recommended to enable two-factor authentication; 4. Keep the phpMyAdmin version up to fix known vulnerabilities; 5. Strengthen the web server and PHP configuration, disable dangerous functions and restrict file execution; 6. Force HTTPS to encrypt communication to prevent credential leakage; 7. Disable phpMyAdmin when not in use or increase HTTP basic authentication; 8. Regularly monitor logs and configure fail2ban to defend against brute force cracking; 9. Delete setup and

How to deploy a Java application How to deploy a Java application Aug 17, 2025 am 12:56 AM

PrepareyourapplicationbyusingMavenorGradletobuildaJARorWARfile,externalizingconfiguration.2.Chooseadeploymentenvironment:runonbaremetal/VMwithjava-jarandsystemd,deployWARonTomcat,containerizewithDocker,orusecloudplatformslikeHeroku.3.Optionally,setup

You are not currently using a display attached to an NVIDIA GPU [Fixed] You are not currently using a display attached to an NVIDIA GPU [Fixed] Aug 19, 2025 am 12:12 AM

Ifyousee"YouarenotusingadisplayattachedtoanNVIDIAGPU,"ensureyourmonitorisconnectedtotheNVIDIAGPUport,configuredisplaysettingsinNVIDIAControlPanel,updatedriversusingDDUandcleaninstall,andsettheprimaryGPUtodiscreteinBIOS/UEFI.Restartaftereach

What is the assert keyword in Java? What is the assert keyword in Java? Aug 17, 2025 am 12:52 AM

TheassertkeywordinJavaisusedtovalidateassumptionsduringdevelopment,throwinganAssertionErroriftheconditionisfalse.2.Ithastwoforms:assertcondition;andassertcondition:message;withthelatterprovidingacustomerrormessage.3.Assertionsaredisabledbydefaultandm

Using XSLT Parameters to Create Dynamic Transformations Using XSLT Parameters to Create Dynamic Transformations Aug 17, 2025 am 09:16 AM

XSLT parameters are a key mechanism for dynamic conversion through external passing values. 1. Use declared parameters and set default values; 2. Pass the actual value from application code (such as C#) through interfaces such as XsltArgumentList; 3. Control conditional processing, localization, data filtering or output format through $paramName reference parameters in the template; 4. Best practices include using meaningful names, providing default values, grouping related parameters, and performing value verification. The rational use of parameters can make XSLT style sheets highly reusable and maintainable, and the same style sheets can produce diversified output results based on different inputs.

Operating System not found [Fixed] Operating System not found [Fixed] Aug 17, 2025 am 09:10 AM

Ifyourcomputershows"OperatingSystemnotfound,"trythesesteps:1.CheckBIOS/UEFIbootorder.2.Verifydiskconnections.3.RepairbootloaderusingWindowsRecovery.4.ReassigndriveletterviaDiskManagement.5.Reinstalltheoperatingsystemifnecessary.

PS oil paint filter greyed out fix PS oil paint filter greyed out fix Aug 18, 2025 am 01:25 AM

TheOilPaintfilterinPhotoshopisgreyedoutusuallybecauseofincompatibledocumentmodeorlayertype;ensureyou'reusingPhotoshopCS6orlaterinthefulldesktopversion,confirmtheimageisin8-bitperchannelandRGBcolormodebycheckingImage>Mode,andmakesureapixel-basedlay

See all articles