首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步编程

异步编程
EN

Stack Overflow用户
提问于 2018-03-27 06:29:37
回答 2查看 463关注 0票数 0

为了学习Java 8,我正在尝试下面的代码。

这个代码的输出是:

代码语言:javascript
复制
Before Get
Rajeev , Welcome to the CalliCoder Blog
After Get.

但根据我对异步程序的理解,输出应该是

,类似于:

代码语言:javascript
复制
Before Get
After Get. 
Rajeev , Welcome to the CalliCoder Blog

对此有任何意见。

代码语言:javascript
复制
 public static void main(String[] args) throws InterruptedException, ExecutionException {

    CompletableFuture<String> welcomeText = CompletableFuture.supplyAsync(() -> {

        for(double i=0;i<1000000000;i++) {
            for(double j=0;i<1000000000;i++) {
                for(double k=0;i<1000000000;i++) {
                    for(double l=0;i<1000000000;i++) {
                        for(double m=0;i<1000000000;i++) {
                            for(double n=0;i<1000000000;i++) {
                                for(double o=0;i<1000000000;i++) {

                                }
                            }
                        }
                    }
                }
            }
        }
        return "Rajeev";
    }).thenApply(name -> {
        return "Hello " + name;
    }).thenApply(greeting -> {
        return greeting + ", Welcome to the CalliCoder Blog";
    });
    System.out.println("Before Get");
    System.out.println(welcomeText.get());
    System.out.println("After Get");
}
EN

回答 2

Stack Overflow用户

发布于 2018-03-27 06:32:10

welcomeText.get()的调用会阻塞,直到结果可用为止。

异步编程并不意味着事情按随机顺序发生,而且它是好的。您必须有一个从异步执行中获益的任务。这个例子与任何事情都没有关系。

票数 0
EN

Stack Overflow用户

发布于 2018-03-28 14:11:30

如果我们正在学习异步编程,那么对.get()的调用是正确的。

在大多数异步场景中,您实际上不需要使用.get(),通常使用whenComplete()

类似于:

代码语言:javascript
复制
.whenComplete((s,e) -> {System.out.println("Really Done -> " + s );});

注释掉get()并在main()中放置一个main(),通常异步是关于异步IO的,而CPU密集的操作实际上并不需要异步。如果您在java中签出netty和其他异步库,您会更欣赏这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49505770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档