等待Callable中的回调

时间:2013-10-21 19:41:46

标签: java future callable

我想做这样的事情:

public class MyCallable implements Callable<Boolean>, MyObserver
{
    Boolean mSuccess = false;

    @Override
    public Boolean call() throws Exception
    {
        // ... Wait here until myCallback is called ...

        return mSuccess;
    }

    @Override
    public void myCallback()
    {
        if(something) mSuccess = true;
    }
}

所以我可以像:

一样使用它
MyCallable callable = new MyCallable();

FutureTask<Boolean> futureTask = new FutureTask<Boolean>(callable);

ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(futureTask);

Boolean successfull = futureTask.get();

这个“等待回调被调用”的代码是什么样的?我想我可以创建一个名为“Boolean mCallbackCalled = false”的成员,并且只是(!mCallbackCalled),但这看起来非常h​​acky ......

1 个答案:

答案 0 :(得分:1)

你根本不应该使用执行者。

相反,在回调中创建一个计数为1的CountDownLatchcountDown(),然后在您的调用代码中创建await()