在calllable的调用线程(main)上等待future.isDone()== true的标准方法是什么?
我尝试通过asyncMethod()在调用线程(主线程)上返回结果。 asyncMethod()立即返回,但在返回之前,首先触发一个导致广播意图返回主线程的进程。在主线程中,我检查future.isDone(),但遗憾的是future.isDone()只返回true的一半时间。
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Boolean> callable = new Callable<Boolean>(){
public Boolean call() {
Boolean result = doSomething();
callbackAsync(); //calls an async method that returns immediately, but will trigger a broadcast intent back to main thread
return result;
}
};
new broadCastReceiver() { ///back on main thread
...
case ACTION_CALLABLE_COMPLETE:
if (future.isDone()) // not always true...
future.get();
}
答案 0 :(得分:0)
您可以在准备好后立即使用CompletionService
来接收期货。以下是您的代码
ExecutorService pool = Executors.newSingleThreadExecutor();
CompletionService<Boolean> completionService = new ExecutorCompletionService<>(pool);
Callable<Boolean> callable = new Callable<Boolean>(){
public Boolean call() {
Boolean result = true;
//callbackAsync(); //calls an async method that returns immediately, but will trigger a broadcast intent back to main thread
return result;
}
};
completionService.submit(callable);
new broadCastReceiver() { ///back on main thread
.....
Future<Boolean> future = completionService.take(); //Will wait for future to complete and return the first completed future
case ACTION_CALLABLE_COMPLETE: future.get();