java - 在 Callable 中等待回调

标签 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”的成员和 while(!mCallbackCalled),但这看起来很老套...

最佳答案

您根本不应该使用执行程序。

相反,创建一个 CountDownLatch计数为 1 时,在回调中使用 countDown() ,然后在调用代码中使用 await()

关于java - 在 Callable 中等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503275/

相关文章:

java - Spring Webflow 2.4.5 多部分/表单数据绑定(bind)问题

java - 将受检异常与 java.util.function.Predicate 一起使用

java - 本体论推理

c++ - tink_core Future (haxe) 形式 c++

c++ - C++在主线程中等待 future 而无需while(true)

java.util.concurrent.ExecutionException : java. lang.NullPointerException 错误

java - Display.syncExec 不在 Callable 内部工作

Java 弃用注释

scala - Scala future 是否支持非阻塞组合器,例如 firstNCompletedOf 和 firstNSuccCompletedOf?

java - 什么时候应该优先选择 Callable 而不是 Runnable?为什么?