在下面的一段代码中,要求是向某个 UI 线程发布一条关于 Callable
运行结果的消息。
Future<T> aFuture = aExecutorService.submit(aCallable); //suppose in thread A
aExecutorService.execute(new Runnable() { //suppose in thread B
@Override
public void run() {
try {
final T aresult = aFuture.get();
sendSuccessMesage(aResult);
}catch( . . . . . . e)
. . . . . . .
sendExceptionHappenedMessage(e.getMessage());
. . . . . . .
}
}
如果线程 A 被中断,线程 B 会一直等待结果吗? 执行此操作的替代/安全方法是什么?
最佳答案
如果任务 aCallable
被取消,则 get() 可能永远不会返回。最安全、最有效的方法是使用一个任务。
Future future = aExecutorService.submit(new Runnable() {
@Override
public void run() {
try {
final T aresult = aCallable.call();
sendSuccessMesage(aResult);
} catch(Throwable e)
sendExceptionHappenedMessage(e.getMessage());
}
}
});
// to cancel.
future.cancel(true);
取消它的另一种方法是在设置为 true 时使用 AtomicBoolean 并检查是否取消。这样,如果需要,仍然可以发送 sendCancelledMessage
。
关于java - 在另一个线程中等待 Future 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12687087/