Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java异步servlet:等待特定事件_Java_Multithreading_Asynchronous_Wait_Notify - Fatal编程技术网

Java异步servlet:等待特定事件

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

编辑: 编辑问题以回应下面的@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();
        }
    }
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的处理,以避免任何副作用。我只想登录到控制台。仍然不工作。您在什么时候将可调用注册到回调事件?