gpt4 book ai didi

java - 在另一个线程中等待 Future 结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:32:04 26 4
gpt4 key购买 nike

在下面的一段代码中,要求是向某个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com