Java异步servlet:等待特定事件

时间:2014-07-23 12:10:51

标签: 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 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)上的事件。

有什么建议吗?我甚至不确定我的方法是否有意义。

1 个答案:

答案 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();
        }
    }