Java CompletableFuture链接未按预期工作
当我在Java CompletableFuture链接未按预期工作,java,asynchronous,future,completable-future,Java,Asynchronous,Future,Completable Future,当我在supplyAsync/然后应用等方法中使用I/O操作时,CompletableFuture未按预期工作 我是新来的CompletableFuture,所以我想我遗漏了一些东西 private static void completableTest() { CompletableFuture.supplyAsync(() -> { GET(); writeToFile("sync"); System.out.println("
supplyAsync
/然后应用等方法中使用I/O操作时,CompletableFuture
未按预期工作
我是新来的CompletableFuture
,所以我想我遗漏了一些东西
private static void completableTest() {
CompletableFuture.supplyAsync(() -> {
GET();
writeToFile("sync");
System.out.println("sync");
return "";
}).thenApply(t -> {
GET();
writeToFile("apply");
System.out.println("apply");
return "";
}).thenAccept(t -> {
writeToFile("accept");
System.out.println("accept");
});
GET()
进行httpGet调用
writeToFile()
将内容写入文件
当我使用GET()
或将其替换为Thread.sleep()
时,我的文件也是空的。但是,如果我不使用GET()
,它可以正常工作
注意:当我在末尾使用join()
时,它可以正常工作。(文件具有正确的输出)。如果不等待未来链完成,您怎么能期望在定义后立即执行任何操作?@geogeleung,您不必显式等待未来链完成,但您必须确保您的程序不会在之前退出。请参阅我建议的重复目标和@didirel,在看到您的评论之前,我做了一次编辑,指定了观察时间,“在您定义它之后”。所以我没有错D关于OP的更多解释:如果您的程序在返回后立即退出,那么回调可能没有执行,也没有机会执行。