我想做这样的事情:
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/