import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return "Hello, World!";
}).thenApply(result -> {
return result.toUpperCase();
}).thenAccept(result -> {
System.out.println(result);
});
future.get();
在上面的示例中,我们首先使用CompletableFuture的supplyAsync方法创建了一个异步任务,该任务会返回一个字符串"Hello, World!"。然后,我们使用thenApply方法对结果进行链式操作,将结果转换为大写字母。接着,我们使用thenAccept方法对结果进行链式操作,将结果输出到控制台。最后,我们使用get方法获取异步计算的结果(如果需要)。
虚拟线程可以以所有开发人员熟悉的形式直接提供这些调试信息。
另一方面,虚拟线程的当前限制是它们只能在 JVM 公共池(ForkJoinPool 的一个实例)中的 OS 线程上运行。这会强制应用程序中的所有虚拟线程在同一个池中运行,从而降低了灵活性。
随着虚拟线程的发展,也许它们将伴随着强大的命令式功能未来形式以及在单独线程池上更灵活的调度。
Future、JDK1.8后的Completefuture以及Guava提供的Future简单例子
Java 1.5开始,提供Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。
当我们需要一个函数方法时,如果这个函数执行的很慢,啊么我们就要进行等待。但有时候,我们并不急着要结果。
因此,我们可以让被调用者立即返回,让他再后台慢慢处理这个请求。对于调用者来说,则可以先处理一些其他任务,在正真需要数据的场合再去尝试获取需要的数据。
二、Future
一般地,是配合Exe