在Java中完成方法调用之前,您将如何实现等待的等效?
基本上我想要做的是hava一种方法,它通过网络向服务器应用程序发送消息,并等待它从服务器获得适当的Ack消息,操作成功完成或操作失败并显示错误消息。
我已经有了一个非阻塞版本的my方法,它传递一个回调类,其中有一个在回调时调用的方法。
构造一个回调类将它传递给我以前的方法,然后执行一个等待操作并在回调上让该类做一个通知是否有意义?
答案 0 :(得分:2)
将.wait()添加到回调类将是最简单的路径。它可以坐在那里旋转一些标志,直到你的回调切换它,只需确保在你的循环中包含Thread.yield()或.sleep()。
保存必须重写替代阻止通信通道。
答案 1 :(得分:1)
简短回答:是的。我很喜欢使用类库中的内容,你所描述的内容听起来很像Observer模式,你已经有了Observer / Observable接口,假设你正在使用J2SE。
编辑:我的咖啡出了点问题:)显然,我想说的是查看java.util.concurrent包中的内容,特别是Future<>和ExecutorService类。答案 2 :(得分:1)
是的,请按照您的建议使用现有方法。在sync方法调用中创建回调函数,该调用将通过wait()/ notify()与sync方法调用进行协调。 sync方法将调用异步方法,然后调用wait()。调用回调时,它会调用notify()来唤醒同步方法,以便返回结果。
答案 3 :(得分:0)
如果您没有使用JMS,请忽略。
如果您使用的是JMS,那么您可以使用QueueRequestor,这是Request Reply integration pattern的实现。
即使使用异步消息,以下调用对客户端也是同步的:
QueueRequestor requestor = null;
try {
requestor = new QueueRequestor(session, queue);
Message response = requestor.send(request);
} finally {
if (requestor == null) {
try {
requestor.close();
} catch (JMSException e) {
// log error message
}
}
}