编辑: 编辑了以下@maress答案回答的问题。
我在java中启用了一个Web服务(启用了异步),调用时会异步调用另一个服务。在我的控制器中我有这个:
private boolean receivedEvent = false;
private final Object SYNC = new Object();
public Callable<String> doStuff()
{
callSomeAsyncFunction();
return new Callable<String> ()
{
@Override
public String call() throws Exception {
synchronized (SYNC)
{
while (receivedEvent == false)
{
SYNC.wait();
}
receivedEvent = false;
System.out.println("RETURN");
return "ok";
}
}
};
}
public void onMyEvent(MyEvent event)
{
synchronized (SYNC)
{
receivedEvent = true;
System.out.println("RECEIVED");
SYNC.notify();
}
}
编辑:通知永远不会通过。永远不会调用System.out.println(“RETURN”)。正在接收事件(显示“已收到”)。
现在我要做的就是等待callSomeAsyncFunction()
完成执行。完成后,它会触发处理程序public void onMyEvent(MyEvent event)
上的事件。
有什么建议吗?我甚至不确定我的方法是否有意义。
答案 0 :(得分:1)
始终在最终实例上同步。
private MyEvent myEvent;
private final Object SYNC = new Object();
public Callable<String> doStuff()
{
callSomeAsyncFunction();
return new Callable<String> ()
{
@Override
public String call() throws Exception {
synchronized (SYNC)
{
while (myEvent == null)
{
SYNC.wait();
}
return "ok";
}
}
};
}
public void onMyEvent(MyEvent event)
{
synchronized (SYNC)
{
myEvent = event;
SYNC.notifyAll();
}
}