【问题标题】:Returning value from function without completing function从函数返回值而不完成函数
【发布时间】:2017-03-27 07:46:11
【问题描述】:

我的功能是向服务器发送 HTTP 请求并获得响应。它看起来像:

public Acknowledgement function() {
     Acknowledgement ack = new Acknowledgement("received");
     //send http request and get response
     return ack;
}

Acknowledgment 的目的是通知调用者 function() 已成功调用并开始处理。

我想在发送 HTTP 请求之前返回确认。一种方法是使用单独的线程(实现 Runnable)来发送请求和获取响应。但是线程已经很老了。还有什么其他最新的线程替代方案可以实现这一目标。

【问题讨论】:

  • 线程并不老...很多日常的现代应用程序都在使用它们
  • 别无选择。你可能想看看ExecutorService,它可以让你运行Runnables。但猜猜到底发生了什么:线程。

标签: java multithreading return


【解决方案1】:

您可以尝试使用回调监听器,例如:

interface LifecycleListener {
    void onStarting();
}

public Acknowledgement function(LifecycleListener listener) {         
     listener.onStarting();
     ...
     ...
}

【讨论】:

    【解决方案2】:

    很多东西在 Java 中已经存在了将近 20 年。不意味着我们应该停止使用 String 还是 Integer?

    但是你是正确的,因为在裸金属线程之上有(稍微)更新的抽象

    所以,要研究的概念是ExecutorServicesFuture 之类的东西。

    直接使用线程;尤其是结合低级原语,例如等待/通知,可能不是 2017 年的首选;您宁愿查看前面提到的 ExecutorService;甚至更进一步,了解RXJava 之类的框架。

    【讨论】:

      【解决方案3】:

      线程不老,如果你想做得更好,你可以使用线程池来管理它们

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        相关资源
        最近更新 更多