java中并发编程CompletableFuture和supplyAsync的用法
在Java中,并发编程可以使用CompletableFuture
类来实现异步操作和并行任务。其中,supplyAsync
是CompletableFuture
类的一个静态方法,用于执行一个有返回值的异步任务。
supplyAsync
方法的语法如下:
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
它接受一个Supplier
函数式接口作为参数,该函数不接受任何参数并返回一个结果对象。
以下是CompletableFuture.supplyAsync
方法的用法示例:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class CompletableFutureExample {
public static void main(String[] args) {
// 异步执行一个有返回值的任务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try {
// 模拟耗时操作
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello, CompletableFuture!";
});
// 当任务完成时,处理返回结果
future.thenAccept(result -> System.out.println("Result: " + result));
// 主线程不阻塞继续执行其他操作
System.out.println("Do something in the main thread...");
// 等待异步任务完成
future.join();
}
}
在上述示例中,supplyAsync
方法接受一个Supplier
Lambda表达式,里面包含了异步执行的任务逻辑。在这个例子中,我们通过TimeUnit.SECONDS.sleep(2)
模拟了一个耗时的操作,然后返回了一个字符串结果。
通过thenAccept
方法,我们可以在任务完成后处理返回结果。在示例中,我们简单地打印出结果。
注意,在主线程中我们可以继续执行其他操作而不阻塞等待异步任务的完成。最后,我们使用join
方法来等待异步任务的完成。
这样使用CompletableFuture.supplyAsync
方法可以方便地进行异步任务的执行,并在任务完成后进行相应的处理。