异步编程 - 在Java中使用异步后,主方法如何返回异步中得到的值?

查看:530
本文介绍了异步编程 - 在Java中使用异步后,主方法如何返回异步中得到的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一个返回值为User的方法,在内部调用了异步方法(比如Rxjava,或者异步的网络请求),其内部匿名函数内才能拿到user对象,那么我的方法应该怎么return这个对象?

解决方案

方法的返回值为user,那这个方法就不能叫异步方法了。除非这个方法返回future,或者类似于可以在之后拿到结果的引用,这个方法才能叫异步方法。想调完方法后得到user,那么方法里面就没有必要再放置异步的代码了,一点意义都没有。

异步的返回结果只能通过回调。

同步的方法通常是这样的

public User syncGetUser() {
    User user = heavyWork();
    return user;
}

由于heavyWork方法可能需要查数据库,或者做大量计算,所以heavyWork方法会执行大量的时间。
如果你不想等待大量的时间,这时候异步就可以派上用场了。

public Future<User> asyncGetUser() {
    Future<User> future = threadPool.submit(new Callable<User> {
        public User call() throws Exception {
            return heavyWork();
        }
    }
    
    return future;
}

到了这里,heavyWork已经交给另外一个线程去跑了,并返回一个future给你。
之后,你可以通过这个future的get方法得到你想要的user。

这才是异步的意义和用处所在。题主的题目本身就是矛盾的。在一个含有异步代码的方法里面返回异步执行的结果,是个矛盾的事情。

这篇关于异步编程 - 在Java中使用异步后,主方法如何返回异步中得到的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆