Java异步servlet:等待特定事件
编辑: 编辑问题以回应下面的@maress答案 我有一个java的web服务(支持异步),当调用它时,它会异步地执行对另一个服务的调用。在我的控制器中,我有:Java异步servlet:等待特定事件,java,multithreading,asynchronous,wait,notify,Java,Multithreading,Asynchronous,Wait,Notify,编辑: 编辑问题以回应下面的@maress答案 我有一个java的web服务(支持异步),当调用它时,它会异步地执行对另一个服务的调用。在我的控制器中,我有: private boolean receivedEvent = false; private final Object SYNC = new Object(); public Callable<String> doStuff() { callSomeAsyncFunction(); return new
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();
}
}
private boolean receivedEvent=false;
私有最终对象同步=新对象();
公共可调用doStuff()
{
callSomeAsyncFunction();
返回新的可调用()
{
@凌驾
公共字符串调用()引发异常{
已同步(同步)
{
while(receivedEvent==false)
{
SYNC.wait();
}
receivedEvent=false;
系统输出打印项次(“返回”);
返回“ok”;
}
}
};
}
MyEvent上的公共无效(MyEvent事件)
{
已同步(同步)
{
receivedEvent=true;
系统输出打印项次(“收到”);
SYNC.notify();
}
}
编辑:通知永远无法通过。从未调用System.out.println(“RETURN”)。正在接收事件(显示“已接收”)
现在我要做的就是等待callSomeAsyncFunction()
完成执行。完成后,它会在处理程序public void onMyEvent(MyEvent事件)
上触发一个事件
有什么建议吗?我甚至不确定我的方法是否有意义。始终在最后一个实例上同步
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();
}
}
private MyEvent MyEvent;
私有最终对象同步=新对象();
公共可调用doStuff()
{
callSomeAsyncFunction();
返回新的可调用()
{
@凌驾
公共字符串调用()引发异常{
已同步(同步)
{
while(myEvent==null)
{
SYNC.wait();
}
返回“ok”;
}
}
};
}
MyEvent上的公共无效(MyEvent事件)
{
已同步(同步)
{
myEvent=事件;
SYNC.notifyAll();
}
}
Thx,现在我没有收到任何错误,但通知不起作用。我从未达到“返回“ok”;“可能是因为callSomeAsyncFunction()从不调用onMy/evnt(MyEvent)函数。是否发布完整的代码?请确保MyEvent在调用onMyEvent(MyEvent)函数时从不为null。只需编辑问题。我完全删除了MyEvent的处理,以避免任何副作用。我只想登录到控制台。仍然不工作。您在什么时候将可调用注册到回调事件?