Java-一系列异步调用,但是在继续之前必须等待每个异步调用的响应

时间:2018-10-11 21:21:18

标签: java asynchronous

单个异步调用的现有流程如下: 调用内部Java服务,该服务发送基于消息的调用。 至此,该过程完成。
当响应(基于消息)返回到Java服务时,将调用观察者模式。 调用onResponse方法,并且应该完成响应。

进行编辑以提供更多细节: 我已经对CountDownLatch和Phaser进行了测试,以使这两种情况都能正常工作,其中我的主线程负责产生并行线程异步调用。并行线程完成,并且主线程等待接收到来自异步调用的响应的通知。如果响应表示成功,则继续进行下一个并行调用,依此类推。这是一个效果很好的移相器示例。问题是,我是在正确的道路上,还是在更容易/更好的事情上?

main thread:
    new Phaser(1);
    for (iteration of number of request objects received){
        create new thread, call serviceMethod.
        phaser.arriveAndAwaitAdvance;  //waits for arrival of registered party 

        if phaser.isTerminated
            stop processing this request;
    }



serviceMethod(){
    phaser.register
    perform call
}


onResponse(){
    if SUCCESS  
        phaser.arriveAndDeregister();  //main thread should continue on to 
                       next call
    else
        phaser.forceTermination
}

1 个答案:

答案 0 :(得分:1)

尽管我对您的问题发表了评论,但我会提供一个答案,因为我相信我可以给您一种不同的答案,而无需查看您的任何代码:

通过定义,异步调用是指调用者不会阻塞等待响应的调用。因此,如果您需要等待响应,那么可以通过进行一系列同步调用来避免描述的问题。

再次,从您的问题中改写一行:“过程应该是我打了电话,但是要等待响应,然后再触发下一个电话。” 描述一个同步呼叫场景。从这个意义上讲,我怀疑您是从错误的方向来解决问题。